package handler import ( "apskel-pos-be/internal/constants" "apskel-pos-be/internal/contract" "apskel-pos-be/internal/mappers" "apskel-pos-be/internal/models" "apskel-pos-be/internal/service" "apskel-pos-be/internal/util" "github.com/gin-gonic/gin" ) type SpinGameHandler struct { spinGameService service.SpinGameService } func NewSpinGameHandler(spinGameService service.SpinGameService) *SpinGameHandler { return &SpinGameHandler{ spinGameService: spinGameService, } } // PlaySpinGame handles the spin game play request func (h *SpinGameHandler) PlaySpinGame(c *gin.Context) { // Get customer ID from JWT token (set by middleware) customerID, exists := c.Get("customer_id") if !exists { util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{ contract.NewResponseError(constants.ValidationErrorCode, constants.SpinGameHandlerEntity, "Customer ID not found in context"), }), "SpinGameHandler::PlaySpinGame") return } // Parse spin ID from request body var req contract.SpinGameRequest if err := c.ShouldBindJSON(&req); err != nil { util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{ contract.NewResponseError(constants.ValidationErrorCode, constants.SpinGameHandlerEntity, err.Error()), }), "SpinGameHandler::PlaySpinGame") return } // Convert to model modelReq := &models.SpinGameRequest{ SpinID: req.SpinID, } // Play the spin game response, err := h.spinGameService.PlaySpinGame(c.Request.Context(), customerID.(string), modelReq) if err != nil { util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{ contract.NewResponseError(constants.InternalServerErrorCode, constants.SpinGameHandlerEntity, err.Error()), }), "SpinGameHandler::PlaySpinGame") return } // Convert model response to contract response contractResponse := mappers.SpinGameResponseModelToContract(response) util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(contractResponse.Data), "SpinGameHandler::PlaySpinGame") }