207 lines
6.8 KiB
Go
207 lines
6.8 KiB
Go
package handlers
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/response"
|
|
"github.com/gofiber/fiber/v2"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// func (h *Handler) CreateBonusMultiplier(c *fiber.Ctx) error {
|
|
// var req struct {
|
|
// Multiplier float32 `json:"multiplier"`
|
|
// BalanceCap int64 `json:"balance_cap"`
|
|
// }
|
|
|
|
// if err := c.BodyParser(&req); err != nil {
|
|
// h.logger.Error("failed to parse bonus multiplier request", "error", err)
|
|
// h.mongoLoggerSvc.Info("failed to parse bonus multiplier",
|
|
// zap.Int("status_code", fiber.StatusBadRequest),
|
|
// zap.Error(err),
|
|
// zap.Time("timestamp", time.Now()),
|
|
// )
|
|
// return fiber.NewError(fiber.StatusBadRequest, "Invalid request body:"+err.Error())
|
|
// }
|
|
|
|
// // currently only one multiplier is allowed
|
|
// // we can add an active bool in the db and have mulitple bonus if needed
|
|
// multipliers, err := h.bonusSvc.GetBonusMultiplier(c.Context())
|
|
// if err != nil {
|
|
// h.logger.Error("failed to get bonus multiplier", "error", err)
|
|
// h.mongoLoggerSvc.Info("Failed to get bonus multiplier",
|
|
// zap.Int("status_code", fiber.StatusBadRequest),
|
|
// zap.Error(err),
|
|
// zap.Time("timestamp", time.Now()),
|
|
// )
|
|
// return fiber.NewError(fiber.StatusBadRequest, "Invalid request body:"+err.Error())
|
|
// }
|
|
|
|
// if len(multipliers) > 0 {
|
|
// return fiber.NewError(fiber.StatusBadRequest, "only one multiplier is allowed")
|
|
// }
|
|
|
|
// if err := h.bonusSvc.CreateBonusMultiplier(c.Context(), req.Multiplier, req.BalanceCap); err != nil {
|
|
// h.mongoLoggerSvc.Error("failed to create bonus multiplier",
|
|
// zap.Int("status_code", fiber.StatusInternalServerError),
|
|
// zap.Error(err),
|
|
// zap.Time("timestamp", time.Now()),
|
|
// )
|
|
// return fiber.NewError(fiber.StatusInternalServerError, "failed to create bonus multiplier"+err.Error())
|
|
// }
|
|
|
|
// return response.WriteJSON(c, fiber.StatusOK, "Create bonus multiplier successfully", nil, nil)
|
|
// }
|
|
|
|
// func (h *Handler) GetBonusMultiplier(c *fiber.Ctx) error {
|
|
// multipliers, err := h.bonusSvc.GetBonusMultiplier(c.Context())
|
|
// if err != nil {
|
|
// h.mongoLoggerSvc.Info("failed to get bonus multiplier",
|
|
// zap.Int("status_code", fiber.StatusBadRequest),
|
|
// zap.Error(err),
|
|
// zap.Time("timestamp", time.Now()),
|
|
// )
|
|
// return fiber.NewError(fiber.StatusBadRequest, "Invalid request body"+err.Error())
|
|
// }
|
|
|
|
// return response.WriteJSON(c, fiber.StatusOK, "Fetched bonus multiplier successfully", multipliers, nil)
|
|
// }
|
|
|
|
// func (h *Handler) UpdateBonusMultiplier(c *fiber.Ctx) error {
|
|
// var req struct {
|
|
// ID int64 `json:"id"`
|
|
// Multiplier float32 `json:"multiplier"`
|
|
// BalanceCap int64 `json:"balance_cap"`
|
|
// }
|
|
|
|
// if err := c.BodyParser(&req); err != nil {
|
|
// h.mongoLoggerSvc.Info("failed to parse bonus multiplier",
|
|
// zap.Int("status_code", fiber.StatusBadRequest),
|
|
// zap.Error(err),
|
|
// zap.Time("timestamp", time.Now()),
|
|
// )
|
|
// return fiber.NewError(fiber.StatusBadRequest, "Invalid request body:"+err.Error())
|
|
// }
|
|
|
|
// if err := h.bonusSvc.UpdateBonusMultiplier(c.Context(), req.ID, req.Multiplier, req.BalanceCap); err != nil {
|
|
// h.logger.Error("failed to update bonus multiplier", "error", err)
|
|
// h.mongoLoggerSvc.Error("failed to update bonus multiplier",
|
|
// zap.Int64("id", req.ID),
|
|
// zap.Int("status_code", fiber.StatusInternalServerError),
|
|
// zap.Error(err),
|
|
// zap.Time("timestamp", time.Now()),
|
|
// )
|
|
// return fiber.NewError(fiber.StatusInternalServerError, "failed to update bonus multiplier:"+err.Error())
|
|
// }
|
|
|
|
// return response.WriteJSON(c, fiber.StatusOK, "Updated bonus multiplier successfully", nil, nil)
|
|
// }
|
|
|
|
func (h *Handler) GetBonusesByUserID(c *fiber.Ctx) error {
|
|
userID, ok := c.Locals("user_id").(int64)
|
|
if !ok || userID == 0 {
|
|
h.InternalServerErrorLogger().Error("Invalid user ID in context",
|
|
zap.Int64("userID", userID),
|
|
)
|
|
return fiber.NewError(fiber.StatusInternalServerError, "Invalid user identification")
|
|
}
|
|
|
|
page := c.QueryInt("page", 1)
|
|
pageSize := c.QueryInt("page_size", 10)
|
|
limit := domain.ValidInt{
|
|
Value: pageSize,
|
|
Valid: true,
|
|
}
|
|
offset := domain.ValidInt{
|
|
Value: page - 1,
|
|
Valid: true,
|
|
}
|
|
|
|
filter := domain.BonusFilter{
|
|
UserID: domain.ValidInt64{
|
|
Value: userID,
|
|
Valid: true,
|
|
},
|
|
Limit: limit,
|
|
Offset: offset,
|
|
}
|
|
|
|
bonuses, err := h.bonusSvc.GetAllUserBonuses(c.Context(), filter)
|
|
|
|
if err != nil {
|
|
h.InternalServerErrorLogger().Error("Failed to bonus by userID", zap.Int64("userId", userID))
|
|
return fiber.NewError(fiber.StatusInternalServerError, "failed to get bonus by user ID")
|
|
}
|
|
|
|
count, err := h.bonusSvc.GetBonusCount(c.Context(), filter)
|
|
if err != nil {
|
|
h.InternalServerErrorLogger().Error("Failed to get bonus count", zap.Int64("userId", userID))
|
|
return fiber.NewError(fiber.StatusInternalServerError, "failed to get bonus count by user ID")
|
|
}
|
|
|
|
res := domain.ConvertToBonusResList(bonuses)
|
|
|
|
return response.WritePaginatedJSON(c, fiber.StatusOK, "Fetched User Bonuses", res, nil, page, int(count))
|
|
|
|
}
|
|
|
|
func (h *Handler) GetBonusStats(c *fiber.Ctx) error {
|
|
userID, ok := c.Locals("user_id").(int64)
|
|
if !ok || userID == 0 {
|
|
h.InternalServerErrorLogger().Error("Invalid user ID in context",
|
|
zap.Int64("userID", userID),
|
|
)
|
|
return fiber.NewError(fiber.StatusInternalServerError, "Invalid user identification")
|
|
}
|
|
|
|
stats, err := h.bonusSvc.GetBonusStats(c.Context(), domain.BonusFilter{
|
|
UserID: domain.ValidInt64{
|
|
Value: userID,
|
|
Valid: true,
|
|
},
|
|
})
|
|
|
|
if err != nil {
|
|
h.InternalServerErrorLogger().Error("Failed to get bonus stats",
|
|
zap.Int64("userID", userID),
|
|
)
|
|
return fiber.NewError(fiber.StatusInternalServerError, "Failed to get bonus stats")
|
|
}
|
|
|
|
res := domain.ConvertToBonusStatsRes(stats)
|
|
|
|
return response.WriteJSON(c, fiber.StatusOK, "Get Bonus Stats", res, nil)
|
|
}
|
|
|
|
// bonus/:id/claim
|
|
func (h *Handler) ClaimBonus(c *fiber.Ctx) error {
|
|
bonusIDParam := c.Params("id")
|
|
bonusID, err := strconv.ParseInt(bonusIDParam, 10, 64)
|
|
if err != nil {
|
|
h.BadRequestLogger().Error("Invalid bonus ID",
|
|
zap.Int64("bonusID", bonusID),
|
|
)
|
|
return fiber.NewError(fiber.StatusBadRequest, "Invalid bonus id")
|
|
}
|
|
|
|
userID, ok := c.Locals("user_id").(int64)
|
|
if !ok || userID == 0 {
|
|
h.InternalServerErrorLogger().Error("Invalid user ID in context",
|
|
zap.Int64("userID", userID),
|
|
)
|
|
return fiber.NewError(fiber.StatusInternalServerError, "Invalid user identification")
|
|
}
|
|
|
|
if err := h.bonusSvc.ProcessBonusClaim(c.Context(), bonusID, userID); err != nil {
|
|
h.InternalServerErrorLogger().Error("Failed to update bonus claim",
|
|
zap.Int64("userID", userID),
|
|
zap.Int64("bonusID", bonusID),
|
|
)
|
|
return fiber.NewError(fiber.StatusInternalServerError, "Failed to update bonus claim")
|
|
}
|
|
|
|
return response.WriteJSON(c, fiber.StatusOK, "Bonus has successfully been claimed", nil, nil)
|
|
|
|
}
|