package handler import ( "github.com/gin-gonic/gin" "apskel-pos-be/internal/constants" "apskel-pos-be/internal/contract" "apskel-pos-be/internal/service" "apskel-pos-be/internal/util" ) // CustomerDeviceHandler serves /customer/devices, where the customer app registers // the FCM token of each device it runs on. type CustomerDeviceHandler struct { devices service.CustomerDeviceService } func NewCustomerDeviceHandler(devices service.CustomerDeviceService) *CustomerDeviceHandler { return &CustomerDeviceHandler{devices: devices} } // Register is PUT /customer/devices. func (h *CustomerDeviceHandler) Register(c *gin.Context) { customerID, ok := customerIDFromGin(c, "CustomerDeviceHandler::Register") if !ok { return } var req contract.RegisterCustomerDeviceRequest if err := c.ShouldBindJSON(&req); err != nil { util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{ contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, "device_id and fcm_token are required"), }), "CustomerDeviceHandler::Register") return } util.HandleResponse(c.Writer, c.Request, h.devices.Register(c.Request.Context(), customerID, &req), "CustomerDeviceHandler::Register") } // Unregister is DELETE /customer/devices/:device_id, for logout. func (h *CustomerDeviceHandler) Unregister(c *gin.Context) { customerID, ok := customerIDFromGin(c, "CustomerDeviceHandler::Unregister") if !ok { return } util.HandleResponse(c.Writer, c.Request, h.devices.Unregister(c.Request.Context(), customerID, c.Param("device_id")), "CustomerDeviceHandler::Unregister") }