123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package sp
- import (
- "git.dmitriygnatenko.ru/dima/homethings/internal/interfaces"
- "git.dmitriygnatenko.ru/dima/homethings/internal/repositories"
- authService "git.dmitriygnatenko.ru/dima/homethings/internal/services/auth"
- dbService "git.dmitriygnatenko.ru/dima/homethings/internal/services/db"
- envService "git.dmitriygnatenko.ru/dima/homethings/internal/services/env"
- mailerService "git.dmitriygnatenko.ru/dima/homethings/internal/services/mailer"
- )
- type ServiceProvider struct {
- env interfaces.Env
- auth interfaces.Auth
- mailer interfaces.Mailer
- placeRepository interfaces.PlaceRepository
- thingRepository interfaces.ThingRepository
- tagRepository interfaces.TagRepository
- placeThingRepository interfaces.PlaceThingRepository
- placeImageRepository interfaces.PlaceImageRepository
- thingImageRepository interfaces.ThingImageRepository
- thingTagRepository interfaces.ThingTagRepository
- userRepository interfaces.UserRepository
- thingNotificationRepository interfaces.ThingNotificationRepository
- fileRepository interfaces.FileRepository
- }
- func Init() (interfaces.ServiceProvider, error) {
- sp := &ServiceProvider{}
- env, err := envService.Init()
- if err != nil {
- return nil, err
- }
- sp.env = env
- auth, err := authService.Init(env)
- if err != nil {
- return nil, err
- }
- sp.auth = auth
- mailer, err := mailerService.Init(env)
- if err != nil {
- return nil, err
- }
- sp.mailer = mailer
- db, err := dbService.Init(env)
- if err != nil {
- return nil, err
- }
- // Init repositories
- sp.placeRepository = repositories.InitPlaceRepository(db)
- sp.thingRepository = repositories.InitThingRepository(db)
- sp.placeThingRepository = repositories.InitPlaceThingRepository(db)
- sp.placeImageRepository = repositories.InitPlaceImageRepository(db)
- sp.thingImageRepository = repositories.InitThingImageRepository(db)
- sp.tagRepository = repositories.InitTagRepository(db)
- sp.thingTagRepository = repositories.InitThingTagRepository(db)
- sp.userRepository = repositories.InitUserRepository(db)
- sp.thingNotificationRepository = repositories.InitThingNotificationRepository(db)
- sp.fileRepository = repositories.InitFileRepository()
- return sp, nil
- }
- func (sp *ServiceProvider) GetEnvService() interfaces.Env {
- return sp.env
- }
- func (sp *ServiceProvider) GetAuthService() interfaces.Auth {
- return sp.auth
- }
- func (sp *ServiceProvider) GetMailerService() interfaces.Mailer {
- return sp.mailer
- }
- func (sp *ServiceProvider) GetPlaceRepository() interfaces.PlaceRepository {
- return sp.placeRepository
- }
- func (sp *ServiceProvider) GetThingRepository() interfaces.ThingRepository {
- return sp.thingRepository
- }
- func (sp *ServiceProvider) GetTagRepository() interfaces.TagRepository {
- return sp.tagRepository
- }
- func (sp *ServiceProvider) GetPlaceThingRepository() interfaces.PlaceThingRepository {
- return sp.placeThingRepository
- }
- func (sp *ServiceProvider) GetPlaceImageRepository() interfaces.PlaceImageRepository {
- return sp.placeImageRepository
- }
- func (sp *ServiceProvider) GetThingImageRepository() interfaces.ThingImageRepository {
- return sp.thingImageRepository
- }
- func (sp *ServiceProvider) GetThingTagRepository() interfaces.ThingTagRepository {
- return sp.thingTagRepository
- }
- func (sp *ServiceProvider) GetThingNotificationRepository() interfaces.ThingNotificationRepository {
- return sp.thingNotificationRepository
- }
- func (sp *ServiceProvider) GetUserRepository() interfaces.UserRepository {
- return sp.userRepository
- }
- func (sp *ServiceProvider) GetFileRepository() interfaces.FileRepository {
- return sp.fileRepository
- }
- func InitMock(deps ...interface{}) interfaces.ServiceProvider {
- sp := ServiceProvider{}
- for _, d := range deps {
- switch s := d.(type) {
- case interfaces.Env:
- sp.env = s
- case interfaces.Auth:
- sp.auth = s
- case interfaces.PlaceThingRepository:
- sp.placeThingRepository = s
- case interfaces.ThingRepository:
- sp.thingRepository = s
- case interfaces.PlaceRepository:
- sp.placeRepository = s
- case interfaces.PlaceImageRepository:
- sp.placeImageRepository = s
- case interfaces.ThingImageRepository:
- sp.thingImageRepository = s
- case interfaces.TagRepository:
- sp.tagRepository = s
- case interfaces.ThingTagRepository:
- sp.thingTagRepository = s
- case interfaces.ThingNotificationRepository:
- sp.thingNotificationRepository = s
- case interfaces.UserRepository:
- sp.userRepository = s
- case interfaces.FileRepository:
- sp.fileRepository = s
- }
- }
- return &sp
- }
|