57 lines
2.4 KiB
Go
57 lines
2.4 KiB
Go
package handler
|
|
|
|
import (
|
|
"apskel-pos-be/internal/constants"
|
|
"apskel-pos-be/internal/contract"
|
|
"apskel-pos-be/internal/logger"
|
|
"apskel-pos-be/internal/service"
|
|
"apskel-pos-be/internal/util"
|
|
"apskel-pos-be/internal/validator"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type GamificationHandler struct {
|
|
gamificationService service.GamificationService
|
|
gamificationValidator validator.GamificationValidator
|
|
}
|
|
|
|
func NewGamificationHandler(
|
|
gamificationService service.GamificationService,
|
|
gamificationValidator validator.GamificationValidator,
|
|
) *GamificationHandler {
|
|
return &GamificationHandler{
|
|
gamificationService: gamificationService,
|
|
gamificationValidator: gamificationValidator,
|
|
}
|
|
}
|
|
|
|
// Play Game Handler
|
|
func (h *GamificationHandler) PlayGame(c *gin.Context) {
|
|
ctx := c.Request.Context()
|
|
var req contract.PlayGameRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::PlayGame -> request binding failed")
|
|
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::PlayGame")
|
|
return
|
|
}
|
|
|
|
validationError, validationErrorCode := h.gamificationValidator.ValidatePlayGameRequest(&req)
|
|
if validationError != nil {
|
|
logger.FromContext(c.Request.Context()).WithError(validationError).Error("GamificationHandler::PlayGame -> request validation failed")
|
|
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::PlayGame")
|
|
return
|
|
}
|
|
|
|
response, err := h.gamificationService.PlayGame(ctx, &req)
|
|
if err != nil {
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::PlayGame -> service call failed")
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.GameEntity, err.Error())}), "GamificationHandler::PlayGame")
|
|
return
|
|
}
|
|
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::PlayGame")
|
|
}
|