package controller import ( "net/http" "users_management/m/middleware" "users_management/m/model/dto/req" "users_management/m/usecase" "users_management/m/utils/common" "github.com/gin-gonic/gin" "github.com/google/uuid" ) type TowerController struct { tu usecase.TowerUseCase rg *gin.RouterGroup } func (tc *TowerController) Route() { rg := tc.rg.Group("/tower") rg.Use(middleware.AuthMiddleware()) rg.Use(middleware.RateLimitMiddleware()) { rg.GET("", tc.GetTower()) rg.POST("", tc.CreateTower()) rg.GET("/:uuid", tc.GetTowerByID()) rg.PUT("/:uuid", tc.UpdateTower()) } } func NewTowerController(tu usecase.TowerUseCase, rg *gin.RouterGroup) *TowerController { return &TowerController{ tu: tu, rg: rg, } } func (tc *TowerController) GetTower() gin.HandlerFunc { return func(c *gin.Context) { towers, err := tc.tu.GetAll() if err != nil { common.ErrorResponses(c, http.StatusBadRequest, err.Error()) return } common.SingleResponses(c, "Success", towers) } } func (tc *TowerController) CreateTower() gin.HandlerFunc { return func(c *gin.Context) { var towerDTO req.TowerDTO err := c.ShouldBindJSON(&towerDTO) if err != nil { common.ErrorResponses(c, http.StatusBadRequest, err.Error()) return } err = tc.tu.Post(towerDTO) if err != nil { common.ErrorResponses(c, http.StatusBadRequest, err.Error()) return } common.SingleResponses(c, "Tower has been created", nil) } } func (tc *TowerController) GetTowerByID() gin.HandlerFunc { return func(c *gin.Context) { id := c.Param("uuid") uuid, err := uuid.Parse(id) if err != nil { common.ErrorResponses(c, http.StatusBadRequest, err.Error()) return } tower, err := tc.tu.GetByID(uuid) if err != nil { common.ErrorResponses(c, http.StatusBadRequest, err.Error()) return } common.SingleResponses(c, "Success", tower) } } func (tc *TowerController) UpdateTower() gin.HandlerFunc { return func(c *gin.Context) { id := c.Param("uuid") uuid, err := uuid.Parse(id) if err != nil { common.ErrorResponses(c, http.StatusBadRequest, err.Error()) } var towerUpdateDTO req.UpdateTowerDTO err = c.ShouldBindJSON(&towerUpdateDTO) if err != nil { common.ErrorResponses(c, http.StatusBadRequest, err.Error()) return } err = tc.tu.UpdateTower(uuid, towerUpdateDTO) if err != nil { common.ErrorResponses(c, http.StatusBadRequest, err.Error()) return } common.SingleResponses(c, "Tower has been updated", nil) } }