package delivery import ( "fmt" "users_management/m/config" "users_management/m/delivery/controller" "users_management/m/manager" "users_management/m/middleware" "users_management/m/utils/common" "github.com/gin-gonic/gin" ) type Server struct { ucManager manager.UsecaseManager engine *gin.Engine host string } func NewServer() *Server { cfg, err := config.NewConfig() if err != nil { panic(err) } infraManager, err := manager.NewInfraManager(cfg) if err != nil { panic(err) } repoManager := manager.NewRepositoryManager(infraManager) ucManager := manager.NewUsecaseManager(repoManager, cfg) engine := gin.Default() engine.Use(common.LoggingToFile()) host := fmt.Sprintf(":%s", cfg.ApiPort) return &Server{ ucManager: ucManager, engine: engine, host: host, } } func (s *Server) setupController() { rg := s.engine.Group("/api/v1") controller.NewUsersController(s.ucManager.NewUserUsecase(), s.ucManager.NewAuthUsecase(),rg).Route() rg.Use(middleware.AuthMiddleware()) { controller.NewDeviceController(s.ucManager.NewDeviceUsecase(), rg).Route() controller.NewBackboneController(s.ucManager.NewBackboneUsecase(), rg).Route() controller.NewFishboneController(s.ucManager.NewFishboneUsecase(), rg).Route() controller.NewTowerController(s.ucManager.NewTowerUsecase(), rg).Route() controller.NewDevicePortController(s.ucManager.NewDevicePortUsecase(), rg).Route() } } func (s *Server) Run() { s.setupController() if err := s.engine.Run(s.host); err != nil { panic(err) } }