package manager import ( "users_management/m/config" "users_management/m/usecase" "users_management/m/utils/service" ) type UsecaseManager interface { NewUserUsecase() usecase.UsersUsecase NewAuthUsecase() usecase.AuthUsecase NewDeviceUsecase() usecase.DeviceUseCase NewBackboneUsecase() usecase.BackboneUseCase NewFishboneUsecase() usecase.FishboneUseCase NewTowerUsecase() usecase.TowerUseCase NewDevicePortUsecase() usecase.DevicePortUseCase } type usecaseManager struct { repo RepositoryManager geocoder service.GeocodingService cfg *config.Config } func NewUsecaseManager(repo RepositoryManager, cfg *config.Config) UsecaseManager { basegeoCoder := service.NewGeocodingService() cachedGeocoder := service.NewCachedGeocodingService(basegeoCoder) return &usecaseManager{repo: repo,cfg: cfg , geocoder: cachedGeocoder} } func (um *usecaseManager) NewUserUsecase() usecase.UsersUsecase { return usecase.NewUsersUsecase(um.repo.NewUserRepository()) } func (um *usecaseManager) NewAuthUsecase() usecase.AuthUsecase { return usecase.NewAuthUsecase(um.repo.NewUserRepository(), um.cfg) } func (um *usecaseManager) NewDeviceUsecase() usecase.DeviceUseCase { return usecase.NewDeviceUseCase(um.repo.NewDeviceRepository()) } func (um *usecaseManager) NewBackboneUsecase() usecase.BackboneUseCase { return usecase.NewBackboneUseCase(um.repo.NewBackboneRepository(),um.repo.NewFishboneRepository()) } func (um *usecaseManager) NewFishboneUsecase() usecase.FishboneUseCase { return usecase.NewFishboneUseCase(um.repo.NewFishboneRepository()) } func (um *usecaseManager) NewTowerUsecase() usecase.TowerUseCase { return usecase.NewTowerUseCase(um.repo.NewTowerRepository(), um.geocoder) } func (um *usecaseManager) NewDevicePortUsecase() usecase.DevicePortUseCase { return usecase.NewDevicePortUseCase(um.repo.NewDevicePortRepository()) }