From fff88bb4b9dd03d2670f480a7a6de8c99a75d788 Mon Sep 17 00:00:00 2001 From: Asher Samuel Date: Sat, 12 Jul 2025 16:21:23 +0300 Subject: [PATCH] accumulator bonus --- internal/services/bet/service.go | 86 ++++++++++++++++++++- internal/web_server/handlers/bet_handler.go | 6 +- 2 files changed, 87 insertions(+), 5 deletions(-) diff --git a/internal/services/bet/service.go b/internal/services/bet/service.go index fbcda23..e55b19b 100644 --- a/internal/services/bet/service.go +++ b/internal/services/bet/service.go @@ -251,9 +251,10 @@ func (s *Service) PlaceBet(ctx context.Context, req domain.CreateBetReq, userID } fastCode := helpers.GenerateFastCode() + amount := req.Amount + (req.Amount * calculateAccumulator(len(outcomes))) newBet := domain.CreateBet{ - Amount: domain.ToCurrency(req.Amount), + Amount: domain.ToCurrency(amount), TotalOdds: totalOdds, Status: domain.OUTCOME_STATUS_PENDING, FullName: req.FullName, @@ -1019,3 +1020,86 @@ func calculateCashbackAmount(amount, total_odds float32) float32 { return amount * multiplier } + +func calculateAccumulator(outcomesCount int) float32 { + switch outcomesCount { + case 3: + return 0.05 + case 4: + return 0.08 + case 5: + return 0.09 + case 6: + return 0.10 + case 7: + return 0.15 + case 8: + return 0.20 + case 9: + return 0.25 + case 10: + return 0.30 + case 11: + return 0.35 + case 12: + return 0.40 + case 13: + return 0.45 + case 14: + return 0.50 + case 15: + return 0.55 + case 16: + return 0.60 + case 17: + return 0.65 + case 18: + return 0.70 + case 19: + return 0.75 + case 20: + return 0.80 + case 21: + return 0.85 + case 22: + return 0.90 + case 23: + return 0.95 + case 24: + return 1.00 + case 25: + return 1.10 + case 26: + return 1.30 + case 27: + return 1.50 + case 28: + return 1.70 + case 29: + return 2.00 + case 30: + return 2.10 + case 31: + return 2.30 + case 32: + return 2.50 + case 33: + return 2.70 + case 34: + return 2.90 + case 35: + return 3.10 + case 36: + return 3.20 + case 37: + return 3.40 + case 38: + return 5.00 + case 39: + return 6.00 + case 40: + return 10.00 + default: + return 0 + } +} diff --git a/internal/web_server/handlers/bet_handler.go b/internal/web_server/handlers/bet_handler.go index c150af6..64b8f06 100644 --- a/internal/web_server/handlers/bet_handler.go +++ b/internal/web_server/handlers/bet_handler.go @@ -25,10 +25,8 @@ import ( // @Failure 500 {object} response.APIResponse // @Router /sport/bet [post] func (h *Handler) CreateBet(c *fiber.Ctx) error { - // userID := c.Locals("user_id").(int64) - // role := c.Locals("role").(domain.Role) - userID := int64(5) - role := domain.RoleAdmin + userID := c.Locals("user_id").(int64) + role := c.Locals("role").(domain.Role) var req domain.CreateBetReq if err := c.BodyParser(&req); err != nil {