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 NewCountAssetsUsecase() usecase.CountAssetsUseCase NewActivityLogUsecase() usecase.ActivityLogUseCase NewDeviceInspectionUsecase() usecase.DeviceInspectionUseCase NewNearestDeviceUsecase() usecase.NearestDeviceUseCase NewDeviceDetailsUsecase() usecase.DeviceDetailsUseCase NewOLTUsecase() usecase.OLTUsecase } 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) NewDeviceDetailsUsecase() usecase.DeviceDetailsUseCase { return usecase.NewDeviceDetailsUseCase( um.repo.NewDeviceDetailsRepository(), um.geocoder, ) } func (um *usecaseManager) NewNearestDeviceUsecase() usecase.NearestDeviceUseCase { return usecase.NewNearestDeviceUseCase( um.repo.NewNearestDeviceRepository(), um.geocoder, ) } 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(),um.geocoder) } func (um *usecaseManager) NewBackboneUsecase() usecase.BackboneUseCase { return usecase.NewBackboneUseCase( um.repo.NewBackboneRepository(), um.repo.NewFishboneRepository(), um.repo.NewDeviceDetailsRepository(), // Add this ) } func (um *usecaseManager) NewFishboneUsecase() usecase.FishboneUseCase { return usecase.NewFishboneUseCase( um.repo.NewFishboneRepository(), um.repo.NewBackboneRepository(), um.repo.NewDeviceDetailsRepository(), // Add this line ) } 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()) } func (um *usecaseManager) NewCountAssetsUsecase() usecase.CountAssetsUseCase { return usecase.NewCountAssetsUseCase(um.repo.NewCountAssetsRepository()) } func (um *usecaseManager) NewActivityLogUsecase() usecase.ActivityLogUseCase { return usecase.NewActivityLogUseCase(um.repo.NewActivityLogRepository()) } func (um *usecaseManager) NewDeviceInspectionUsecase() usecase.DeviceInspectionUseCase { return usecase.NewDeviceInspectionUseCase( um.repo.NewDeviceInspectionRepository(), um.NewActivityLogUsecase(), service.NewGeocodingService(), // Add the geocoding service ) } func (um *usecaseManager) NewOLTUsecase() usecase.OLTUsecase { return usecase.NewOLTUsecase(um.repo.NewOLTRepo(), um.repo.NewDeviceDetailsRepository(), service.NewGeocodingService()) }