528 lines
31 KiB
Go
528 lines
31 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"
|
||
|
|
"github.com/google/uuid"
|
||
|
|
)
|
||
|
|
|
||
|
|
type GamificationHandler struct {
|
||
|
|
gamificationService service.GamificationService
|
||
|
|
gamificationValidator validator.GamificationValidator
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewGamificationHandler(
|
||
|
|
gamificationService service.GamificationService,
|
||
|
|
gamificationValidator validator.GamificationValidator,
|
||
|
|
) *GamificationHandler {
|
||
|
|
return &GamificationHandler{
|
||
|
|
gamificationService: gamificationService,
|
||
|
|
gamificationValidator: gamificationValidator,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Customer Points Handlers
|
||
|
|
func (h *GamificationHandler) CreateCustomerPoints(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
|
||
|
|
var req contract.CreateCustomerPointsRequest
|
||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::CreateCustomerPoints -> request binding failed")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::CreateCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
validationError, validationErrorCode := h.gamificationValidator.ValidateCreateCustomerPointsRequest(&req)
|
||
|
|
if validationError != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(validationError).Error("GamificationHandler::CreateCustomerPoints -> request validation failed")
|
||
|
|
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::CreateCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response, err := h.gamificationService.CreateCustomerPoints(ctx, &req)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::CreateCustomerPoints -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerPointsEntity, err.Error())}), "GamificationHandler::CreateCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::CreateCustomerPoints")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *GamificationHandler) GetCustomerPoints(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
|
||
|
|
idStr := c.Param("id")
|
||
|
|
id, err := uuid.Parse(idStr)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::GetCustomerPoints -> invalid ID")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.InvalidFieldErrorCode, constants.CustomerPointsEntity, "Invalid ID format")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::GetCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response, err := h.gamificationService.GetCustomerPoints(ctx, id)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::GetCustomerPoints -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerPointsEntity, err.Error())}), "GamificationHandler::GetCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::GetCustomerPoints")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *GamificationHandler) GetCustomerPointsByCustomerID(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
customerIDStr := c.Param("customer_id")
|
||
|
|
customerID, err := uuid.Parse(customerIDStr)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::GetCustomerPointsByCustomerID -> invalid customer ID")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.InvalidFieldErrorCode, constants.CustomerPointsEntity, "Invalid customer ID format")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::GetCustomerPointsByCustomerID")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response, err := h.gamificationService.GetCustomerPointsByCustomerID(ctx, customerID)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::GetCustomerPointsByCustomerID -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerPointsEntity, err.Error())}), "GamificationHandler::GetCustomerPointsByCustomerID")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::GetCustomerPointsByCustomerID")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *GamificationHandler) ListCustomerPoints(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
var req contract.ListCustomerPointsRequest
|
||
|
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::ListCustomerPoints -> request binding failed")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::ListCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
validationError, validationErrorCode := h.gamificationValidator.ValidateListCustomerPointsRequest(&req)
|
||
|
|
if validationError != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(validationError).Error("GamificationHandler::ListCustomerPoints -> request validation failed")
|
||
|
|
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::ListCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response, err := h.gamificationService.ListCustomerPoints(ctx, &req)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::ListCustomerPoints -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerPointsEntity, err.Error())}), "GamificationHandler::ListCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::ListCustomerPoints")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *GamificationHandler) UpdateCustomerPoints(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
idStr := c.Param("id")
|
||
|
|
id, err := uuid.Parse(idStr)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::UpdateCustomerPoints -> invalid ID")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.InvalidFieldErrorCode, constants.CustomerPointsEntity, "Invalid ID format")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::UpdateCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
var req contract.UpdateCustomerPointsRequest
|
||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::UpdateCustomerPoints -> request binding failed")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::UpdateCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
validationError, validationErrorCode := h.gamificationValidator.ValidateUpdateCustomerPointsRequest(&req)
|
||
|
|
if validationError != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(validationError).Error("GamificationHandler::UpdateCustomerPoints -> request validation failed")
|
||
|
|
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::UpdateCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response, err := h.gamificationService.UpdateCustomerPoints(ctx, id, &req)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::UpdateCustomerPoints -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerPointsEntity, err.Error())}), "GamificationHandler::UpdateCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::UpdateCustomerPoints")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *GamificationHandler) DeleteCustomerPoints(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
idStr := c.Param("id")
|
||
|
|
id, err := uuid.Parse(idStr)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::DeleteCustomerPoints -> invalid ID")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.InvalidFieldErrorCode, constants.CustomerPointsEntity, "Invalid ID format")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::DeleteCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
err = h.gamificationService.DeleteCustomerPoints(ctx, id)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::DeleteCustomerPoints -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerPointsEntity, err.Error())}), "GamificationHandler::DeleteCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(nil), "GamificationHandler::DeleteCustomerPoints")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *GamificationHandler) AddCustomerPoints(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
customerIDStr := c.Param("customer_id")
|
||
|
|
customerID, err := uuid.Parse(customerIDStr)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::AddCustomerPoints -> invalid customer ID")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.InvalidFieldErrorCode, constants.CustomerPointsEntity, "Invalid customer ID format")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::AddCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
var req contract.AddCustomerPointsRequest
|
||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::AddCustomerPoints -> request binding failed")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::AddCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
validationError, validationErrorCode := h.gamificationValidator.ValidateAddCustomerPointsRequest(&req)
|
||
|
|
if validationError != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(validationError).Error("GamificationHandler::AddCustomerPoints -> request validation failed")
|
||
|
|
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::AddCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response, err := h.gamificationService.AddCustomerPoints(ctx, customerID, &req)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::AddCustomerPoints -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerPointsEntity, err.Error())}), "GamificationHandler::AddCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::AddCustomerPoints")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *GamificationHandler) DeductCustomerPoints(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
customerIDStr := c.Param("customer_id")
|
||
|
|
customerID, err := uuid.Parse(customerIDStr)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::DeductCustomerPoints -> invalid customer ID")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.InvalidFieldErrorCode, constants.CustomerPointsEntity, "Invalid customer ID format")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::DeductCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
var req contract.DeductCustomerPointsRequest
|
||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::DeductCustomerPoints -> request binding failed")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::DeductCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
validationError, validationErrorCode := h.gamificationValidator.ValidateDeductCustomerPointsRequest(&req)
|
||
|
|
if validationError != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(validationError).Error("GamificationHandler::DeductCustomerPoints -> request validation failed")
|
||
|
|
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::DeductCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response, err := h.gamificationService.DeductCustomerPoints(ctx, customerID, &req)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::DeductCustomerPoints -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerPointsEntity, err.Error())}), "GamificationHandler::DeductCustomerPoints")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::DeductCustomerPoints")
|
||
|
|
}
|
||
|
|
|
||
|
|
// 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")
|
||
|
|
}
|
||
|
|
|
||
|
|
// Additional handler methods for other gamification features
|
||
|
|
func (h *GamificationHandler) CreateCustomerTokens(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
var req contract.CreateCustomerTokensRequest
|
||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::CreateCustomerTokens -> request binding failed")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::CreateCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
validationError, validationErrorCode := h.gamificationValidator.ValidateCreateCustomerTokensRequest(&req)
|
||
|
|
if validationError != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(validationError).Error("GamificationHandler::CreateCustomerTokens -> request validation failed")
|
||
|
|
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::CreateCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response, err := h.gamificationService.CreateCustomerTokens(ctx, &req)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::CreateCustomerTokens -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerTokensEntity, err.Error())}), "GamificationHandler::CreateCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::CreateCustomerTokens")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *GamificationHandler) GetCustomerTokens(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
idStr := c.Param("id")
|
||
|
|
id, err := uuid.Parse(idStr)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::GetCustomerTokens -> invalid ID")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.InvalidFieldErrorCode, constants.CustomerTokensEntity, "Invalid ID format")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::GetCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response, err := h.gamificationService.GetCustomerTokens(ctx, id)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::GetCustomerTokens -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerTokensEntity, err.Error())}), "GamificationHandler::GetCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::GetCustomerTokens")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *GamificationHandler) GetCustomerTokensByCustomerIDAndType(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
customerIDStr := c.Param("customer_id")
|
||
|
|
customerID, err := uuid.Parse(customerIDStr)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::GetCustomerTokensByCustomerIDAndType -> invalid customer ID")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.InvalidFieldErrorCode, constants.CustomerTokensEntity, "Invalid customer ID format")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::GetCustomerTokensByCustomerIDAndType")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
tokenType := c.Param("token_type")
|
||
|
|
|
||
|
|
response, err := h.gamificationService.GetCustomerTokensByCustomerIDAndType(ctx, customerID, tokenType)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::GetCustomerTokensByCustomerIDAndType -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerTokensEntity, err.Error())}), "GamificationHandler::GetCustomerTokensByCustomerIDAndType")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::GetCustomerTokensByCustomerIDAndType")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *GamificationHandler) ListCustomerTokens(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
var req contract.ListCustomerTokensRequest
|
||
|
|
if err := c.ShouldBindQuery(&req); err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::ListCustomerTokens -> request binding failed")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::ListCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
validationError, validationErrorCode := h.gamificationValidator.ValidateListCustomerTokensRequest(&req)
|
||
|
|
if validationError != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(validationError).Error("GamificationHandler::ListCustomerTokens -> request validation failed")
|
||
|
|
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::ListCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response, err := h.gamificationService.ListCustomerTokens(ctx, &req)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::ListCustomerTokens -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerTokensEntity, err.Error())}), "GamificationHandler::ListCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::ListCustomerTokens")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *GamificationHandler) UpdateCustomerTokens(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
idStr := c.Param("id")
|
||
|
|
id, err := uuid.Parse(idStr)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::UpdateCustomerTokens -> invalid ID")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.InvalidFieldErrorCode, constants.CustomerTokensEntity, "Invalid ID format")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::UpdateCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
var req contract.UpdateCustomerTokensRequest
|
||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::UpdateCustomerTokens -> request binding failed")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::UpdateCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
validationError, validationErrorCode := h.gamificationValidator.ValidateUpdateCustomerTokensRequest(&req)
|
||
|
|
if validationError != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(validationError).Error("GamificationHandler::UpdateCustomerTokens -> request validation failed")
|
||
|
|
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::UpdateCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response, err := h.gamificationService.UpdateCustomerTokens(ctx, id, &req)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::UpdateCustomerTokens -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerTokensEntity, err.Error())}), "GamificationHandler::UpdateCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::UpdateCustomerTokens")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *GamificationHandler) DeleteCustomerTokens(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
idStr := c.Param("id")
|
||
|
|
id, err := uuid.Parse(idStr)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::DeleteCustomerTokens -> invalid ID")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.InvalidFieldErrorCode, constants.CustomerTokensEntity, "Invalid ID format")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::DeleteCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
err = h.gamificationService.DeleteCustomerTokens(ctx, id)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::DeleteCustomerTokens -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerTokensEntity, err.Error())}), "GamificationHandler::DeleteCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(nil), "GamificationHandler::DeleteCustomerTokens")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *GamificationHandler) AddCustomerTokens(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
customerIDStr := c.Param("customer_id")
|
||
|
|
customerID, err := uuid.Parse(customerIDStr)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::AddCustomerTokens -> invalid customer ID")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.InvalidFieldErrorCode, constants.CustomerTokensEntity, "Invalid customer ID format")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::AddCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
tokenType := c.Param("token_type")
|
||
|
|
|
||
|
|
var req contract.AddCustomerTokensRequest
|
||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::AddCustomerTokens -> request binding failed")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::AddCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
validationError, validationErrorCode := h.gamificationValidator.ValidateAddCustomerTokensRequest(&req)
|
||
|
|
if validationError != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(validationError).Error("GamificationHandler::AddCustomerTokens -> request validation failed")
|
||
|
|
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::AddCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response, err := h.gamificationService.AddCustomerTokens(ctx, customerID, tokenType, &req)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::AddCustomerTokens -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerTokensEntity, err.Error())}), "GamificationHandler::AddCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::AddCustomerTokens")
|
||
|
|
}
|
||
|
|
|
||
|
|
func (h *GamificationHandler) DeductCustomerTokens(c *gin.Context) {
|
||
|
|
ctx := c.Request.Context()
|
||
|
|
customerIDStr := c.Param("customer_id")
|
||
|
|
customerID, err := uuid.Parse(customerIDStr)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::DeductCustomerTokens -> invalid customer ID")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.InvalidFieldErrorCode, constants.CustomerTokensEntity, "Invalid customer ID format")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::DeductCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
tokenType := c.Param("token_type")
|
||
|
|
|
||
|
|
var req contract.DeductCustomerTokensRequest
|
||
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::DeductCustomerTokens -> request binding failed")
|
||
|
|
validationResponseError := contract.NewResponseError(constants.MissingFieldErrorCode, constants.RequestEntity, err.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::DeductCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
validationError, validationErrorCode := h.gamificationValidator.ValidateDeductCustomerTokensRequest(&req)
|
||
|
|
if validationError != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(validationError).Error("GamificationHandler::DeductCustomerTokens -> request validation failed")
|
||
|
|
validationResponseError := contract.NewResponseError(validationErrorCode, constants.RequestEntity, validationError.Error())
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{validationResponseError}), "GamificationHandler::DeductCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
response, err := h.gamificationService.DeductCustomerTokens(ctx, customerID, tokenType, &req)
|
||
|
|
if err != nil {
|
||
|
|
logger.FromContext(c.Request.Context()).WithError(err).Error("GamificationHandler::DeductCustomerTokens -> service call failed")
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildErrorResponse([]*contract.ResponseError{contract.NewResponseError(constants.InternalServerErrorCode, constants.CustomerTokensEntity, err.Error())}), "GamificationHandler::DeductCustomerTokens")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
util.HandleResponse(c.Writer, c.Request, contract.BuildSuccessResponse(response), "GamificationHandler::DeductCustomerTokens")
|
||
|
|
}
|