Added UnitOfWork pattern and created generic repositories