package handlers // import ( // "github.com/SamuelTariku/FortuneBet-Backend/internal/domain" // "github.com/gofiber/fiber/v2" // ) // // @Summary Get Veli games list // // @Description Get list of available Veli games // // @Tags Virtual Games - Veli Games // // @Produce json // // @Success 200 {array} domain.VeliGame // // @Failure 500 {object} domain.ErrorResponse // // @Router /veli/games [get] // func (h *Handler) GetGames(c *fiber.Ctx) error { // games, err := h.service.GetGames(c.Context()) // if err != nil { // return domain.UnExpectedErrorResponse(c) // } // return c.Status(fiber.StatusOK).JSON(games) // } // // @Summary Launch Veli game // // @Description Get URL to launch a Veli game // // @Tags Virtual Games - Veli Games // // @Accept json // // @Produce json // // @Param request body LaunchGameRequest true "Launch game request" // // @Success 200 {object} LaunchGameResponse // // @Failure 400 {object} domain.ErrorResponse // // @Failure 500 {object} domain.ErrorResponse // // @Router /veli/games/launch [post] // func (h *Handler) LaunchGame(c *fiber.Ctx) error { // var req struct { // PlayerID string `json:"player_id" validate:"required"` // GameID string `json:"game_id" validate:"required"` // } // if err := c.BodyParser(&req); err != nil { // return domain.BadRequestResponse(c) // } // gameURL, err := h.service.LaunchGame(c.Context(), req.PlayerID, req.GameID) // if err != nil { // return domain.UnExpectedErrorResponse(c) // } // return c.Status(fiber.StatusOK).JSON(fiber.Map{ // "url": gameURL, // }) // } // // @Summary Place bet // // @Description Place a bet on a Veli game // // @Tags Virtual Games - Veli Games // // @Accept json // // @Produce json // // @Param request body PlaceBetRequest true "Place bet request" // // @Success 200 {object} domain.VeliTransaction // // @Failure 400 {object} domain.ErrorResponse // // @Failure 500 {object} domain.ErrorResponse // // @Router /veli/bets [post] // func (h *Handler) PlaceBet(c *fiber.Ctx) error { // var req struct { // PlayerID string `json:"player_id" validate:"required"` // GameID string `json:"game_id" validate:"required"` // Amount float64 `json:"amount" validate:"required,gt=0"` // } // if err := c.BodyParser(&req); err != nil { // return domain.BadRequestResponse(c) // } // tx, err := h.service.PlaceBet(c.Context(), req.PlayerID, req.GameID, req.Amount) // if err != nil { // if err == domain.ErrInsufficientBalance { // return c.Status(fiber.StatusBadRequest).JSON(domain.ErrorResponse{ // Message: "Insufficient balance", // }) // } // return domain.UnExpectedErrorResponse(c) // } // return c.Status(fiber.StatusOK).JSON(tx) // } // // @Summary Bet settlement webhook // // @Description Handle bet settlement from Veli // // @Tags Virtual Games - Veli Games // // @Accept json // // @Produce json // // @Param request body SettlementRequest true "Settlement request" // // @Success 200 {object} domain.Response // // @Failure 400 {object} domain.ErrorResponse // // @Failure 500 {object} domain.ErrorResponse // // @Router /veli/webhooks/settlement [post] // func (h *Handler) HandleSettlement(c *fiber.Ctx) error { // var req struct { // TransactionID string `json:"transaction_id" validate:"required"` // PlayerID string `json:"player_id" validate:"required"` // Amount float64 `json:"amount" validate:"required"` // IsWin bool `json:"is_win"` // } // if err := c.BodyParser(&req); err != nil { // return domain.BadRequestResponse(c) // } // // Verify signature // if !h.service.VerifyWebhookSignature(c.Request().Body(), c.Get("X-Signature")) { // return domain.UnauthorizedResponse(c) // } // // Process settlement // tx, err := h.service.SettleBet(c.Context(), req.TransactionID, req.PlayerID, req.Amount, req.IsWin) // if err != nil { // return domain.UnExpectedErrorResponse(c) // } // return c.Status(fiber.StatusOK).JSON(tx) // }