A lot of the logic in the repositories looks replicated throughout all of the repositories. This may be better to break this up into reusable traits. I.e.: OrderService extends ... with Creatable[t] with Deleteable[T] with Updateable[T]