105 lines
3.8 KiB
Go
105 lines
3.8 KiB
Go
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
|
|
cfg *config.Config
|
|
}
|
|
|
|
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(middleware.CORSMiddleware())
|
|
engine.Use(middleware.ConditionalActivityLoggingMiddleware(ucManager.NewActivityLogUsecase(), cfg))
|
|
|
|
engine.Use(common.LoggingToFile())
|
|
host := fmt.Sprintf(":%s", cfg.ApiPort)
|
|
|
|
return &Server{
|
|
ucManager: ucManager,
|
|
engine: engine,
|
|
host: host,
|
|
cfg: cfg,
|
|
}
|
|
}
|
|
|
|
func (s *Server) setupController() {
|
|
|
|
s.engine.Static("/uploads", "./uploads")
|
|
|
|
rg := s.engine.Group("/api/v1")
|
|
|
|
// Add bypass controller FIRST - before any auth middleware
|
|
controller.NewBypassController(s.ucManager.NewUserUsecase(), rg).Route()
|
|
|
|
// Add auth controller (public endpoints)
|
|
controller.NewAuthController(s.ucManager.NewAuthUsecase(), rg).Route()
|
|
|
|
publicRegistration := rg.Group("/user-registration")
|
|
{
|
|
publicRegistration.POST("/register", controller.NewUserRegistrationController(s.ucManager.NewUserUsecase(), rg).RegisterUser)
|
|
}
|
|
|
|
|
|
|
|
// Add user registration controller (public endpoints)
|
|
// controller.NewUserRegistrationController(s.ucManager.NewUserUsecase(), rg).Route()
|
|
|
|
// Now apply auth middleware to protected routes
|
|
protected := rg.Use(middleware.ConditionalAuthMiddleware(s.ucManager.NewUserUsecase(), s.ucManager.NewAuthUsecase(), s.cfg)).(*gin.RouterGroup)
|
|
{
|
|
protectedRegistration := protected.Group("/user-registration")
|
|
{
|
|
protectedRegistration.GET("/pending", middleware.RequireAdminRole(), controller.NewUserRegistrationController(s.ucManager.NewUserUsecase(), protected).GetPendingUsers)
|
|
protectedRegistration.PUT("/approve/:id", middleware.RequireAdminRole(), controller.NewUserRegistrationController(s.ucManager.NewUserUsecase(), protected).ApproveUser)
|
|
protectedRegistration.PUT("/reject/:id", middleware.RequireAdminRole(), controller.NewUserRegistrationController(s.ucManager.NewUserUsecase(), protected).RejectUser)
|
|
}
|
|
controller.NewUserRoleManagementController(s.ucManager.NewUserUsecase(), protected).Route()
|
|
controller.NewUsersController(s.ucManager.NewUserUsecase(), s.ucManager.NewAuthUsecase(), protected).Route()
|
|
controller.NewCountAssetsController(s.ucManager.NewCountAssetsUsecase(), protected).Route()
|
|
controller.NewDeviceController(s.ucManager.NewDeviceUsecase(), protected, s.cfg).Route()
|
|
controller.NewBackboneController(s.ucManager.NewBackboneUsecase(), protected, s.cfg).Route()
|
|
controller.NewFishboneController(s.ucManager.NewFishboneUsecase(), protected, s.cfg).Route()
|
|
controller.NewTowerController(s.ucManager.NewTowerUsecase(), protected, s.cfg).Route()
|
|
controller.NewDevicePortController(s.ucManager.NewDevicePortUsecase(), protected).Route()
|
|
controller.NewActivityLogController(s.ucManager.NewActivityLogUsecase(), protected, s.cfg).Route()
|
|
controller.NewDeviceInspectionController(s.ucManager.NewDeviceInspectionUsecase(), protected).Route()
|
|
controller.NewNearestDeviceController(s.ucManager.NewNearestDeviceUsecase(), protected, s.cfg).Route()
|
|
controller.NewDeviceDetailsController(s.ucManager.NewDeviceDetailsUsecase(), protected, s.cfg).Route()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *Server) Run() {
|
|
s.setupController()
|
|
if err := s.engine.Run(s.host); err != nil {
|
|
panic(err)
|
|
}
|
|
} |