123 lines
3.9 KiB
Go
123 lines
3.9 KiB
Go
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)
|
|
// }
|