63 lines
2.1 KiB
Go
63 lines
2.1 KiB
Go
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")
|
|
}
|