significant refactor: moved a bunch of batch logic into models and we now rely on the core caching layer to handle caching of batch metadata