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 DeviceDetailsController struct { deviceDetailsUC usecase.DeviceDetailsUseCase rg *gin.RouterGroup } func NewDeviceDetailsController(deviceDetailsUC usecase.DeviceDetailsUseCase, rg *gin.RouterGroup) *DeviceDetailsController { return &DeviceDetailsController{ deviceDetailsUC: deviceDetailsUC, rg: rg, } } func (c *DeviceDetailsController) Route() { deviceDetails := c.rg.Group("/device-details") deviceDetails.Use(middleware.RequireAnyRole("Teknisi", "Admin", "Superadmin")) { deviceDetails.GET("", c.getAllDeviceDetails) deviceDetails.POST("", c.createDeviceDetails) deviceDetails.GET("/:id", c.getDeviceDetailsByID) deviceDetails.PUT("/:id", c.updateDeviceDetails) deviceDetails.DELETE("/:id", c.deleteDeviceDetails) deviceDetails.POST("/:id/recalculate-ports", c.recalculatePortUsage) } } func (c *DeviceDetailsController) getAllDeviceDetails(ctx *gin.Context) { devices, err := c.deviceDetailsUC.GetAllDeviceDetails() if err != nil { common.ErrorResponses(ctx, http.StatusInternalServerError, err.Error()) return } common.SingleResponses(ctx, "Device details retrieved successfully", devices) } func (c *DeviceDetailsController) createDeviceDetails(ctx *gin.Context) { var request req.DeviceDetailsDTO if err := ctx.ShouldBindJSON(&request); err != nil { common.ErrorResponses(ctx, http.StatusBadRequest, err.Error()) return } err := c.deviceDetailsUC.CreateDeviceDetails(request) if err != nil { common.ErrorResponses(ctx, http.StatusBadRequest, err.Error()) return } common.SingleResponses(ctx, "Device details created successfully", nil) } func (c *DeviceDetailsController) getDeviceDetailsByID(ctx *gin.Context) { id := ctx.Param("id") deviceID, err := uuid.Parse(id) if err != nil { common.ErrorResponses(ctx, http.StatusBadRequest, "Invalid device ID") return } device, err := c.deviceDetailsUC.GetDeviceDetailsByID(deviceID) if err != nil { common.ErrorResponses(ctx, http.StatusNotFound, err.Error()) return } common.SingleResponses(ctx, "Device details retrieved successfully", device) } func (c *DeviceDetailsController) updateDeviceDetails(ctx *gin.Context) { id := ctx.Param("id") deviceID, err := uuid.Parse(id) if err != nil { common.ErrorResponses(ctx, http.StatusBadRequest, "Invalid device ID") return } var request req.UpdateDeviceDetailsDTO if err := ctx.ShouldBindJSON(&request); err != nil { common.ErrorResponses(ctx, http.StatusBadRequest, err.Error()) return } err = c.deviceDetailsUC.UpdateDeviceDetails(deviceID, request) if err != nil { common.ErrorResponses(ctx, http.StatusBadRequest, err.Error()) return } common.SingleResponses(ctx, "Device details updated successfully", nil) } func (c *DeviceDetailsController) deleteDeviceDetails(ctx *gin.Context) { id := ctx.Param("id") deviceID, err := uuid.Parse(id) if err != nil { common.ErrorResponses(ctx, http.StatusBadRequest, "Invalid device ID") return } err = c.deviceDetailsUC.DeleteDeviceDetails(deviceID) if err != nil { common.ErrorResponses(ctx, http.StatusBadRequest, err.Error()) return } common.SingleResponses(ctx, "Device details deleted successfully", nil) } func (c *DeviceDetailsController) recalculatePortUsage(ctx *gin.Context) { id := ctx.Param("id") deviceID, err := uuid.Parse(id) if err != nil { common.ErrorResponses(ctx, http.StatusBadRequest, "Invalid device ID") return } err = c.deviceDetailsUC.RecalculatePortUsage(deviceID) if err != nil { common.ErrorResponses(ctx, http.StatusInternalServerError, err.Error()) return } common.SingleResponses(ctx, "Port usage recalculated successfully", nil) }