applied single responsibility with service provider and the repository pattern :beer: