add raffle filters
This commit is contained in:
parent
723ca34660
commit
ee27ec7f10
|
|
@ -523,6 +523,19 @@ CREATE TABLE IF NOT EXISTS raffle_winners (
|
|||
rank INT NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS raffle_sport_filters (
|
||||
id SERIAL PRIMARY KEY,
|
||||
raffle_id INT NOT NULL REFERENCES raffles(id) ON DELETE CASCADE,
|
||||
sport_id BIGINT NOT NULL,
|
||||
league_id BIGINT NOT NULL,
|
||||
CONSTRAINT unique_raffle_sport_league UNIQUE (raffle_id, sport_id, league_id)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS raffle_game_filters (
|
||||
id SERIAL PRIMARY KEY,
|
||||
raffle_id INT NOT NULL REFERENCES raffles(id) ON DELETE CASCADE,
|
||||
game_id VARCHAR(150) NOT NULL,
|
||||
CONSTRAINT unique_raffle_game UNIQUE (raffle_id, game_id)
|
||||
);
|
||||
------ Views
|
||||
CREATE VIEW companies_details AS
|
||||
SELECT companies.*,
|
||||
|
|
@ -737,4 +750,4 @@ ADD CONSTRAINT fk_event_settings_company FOREIGN KEY (company_id) REFERENCES com
|
|||
ADD CONSTRAINT fk_event_settings_event FOREIGN KEY (event_id) REFERENCES events (id) ON DELETE CASCADE;
|
||||
ALTER TABLE company_odd_settings
|
||||
ADD CONSTRAINT fk_odds_settings_company FOREIGN KEY (company_id) REFERENCES companies (id) ON DELETE CASCADE,
|
||||
ADD CONSTRAINT fk_odds_settings_odds_market FOREIGN KEY (odds_market_id) REFERENCES odds_market (id) ON DELETE CASCADE;
|
||||
ADD CONSTRAINT fk_odds_settings_odds_market FOREIGN KEY (odds_market_id) REFERENCES odds_market (id) ON DELETE CASCADE;
|
||||
|
|
|
|||
|
|
@ -59,3 +59,8 @@ RETURNING *;
|
|||
UPDATE raffles
|
||||
SET status = 'completed'
|
||||
WHERE id = $1;
|
||||
|
||||
-- name: AddSportRaffleFilter :one
|
||||
INSERT INTO raffle_sport_filters (raffle_id, sport_id, league_id)
|
||||
VALUES ($1, $2, $3)
|
||||
RETURNING *;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: auth.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: bet.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: bet_stat.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: bonus.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: branch.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: cashier.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: company.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: copyfrom.go
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
|
||||
package dbgen
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: direct_deposit.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: disabled_odds.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: event_history.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: events.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: events_stat.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: flags.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: institutions.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: issue_reporting.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: leagues.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: location.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
|
||||
package dbgen
|
||||
|
||||
|
|
@ -495,6 +495,19 @@ type Raffle struct {
|
|||
Status string `json:"status"`
|
||||
}
|
||||
|
||||
type RaffleGameFilter struct {
|
||||
ID int32 `json:"id"`
|
||||
RaffleID int32 `json:"raffle_id"`
|
||||
GameID string `json:"game_id"`
|
||||
}
|
||||
|
||||
type RaffleSportFilter struct {
|
||||
ID int32 `json:"id"`
|
||||
RaffleID int32 `json:"raffle_id"`
|
||||
SportID int64 `json:"sport_id"`
|
||||
LeagueID int64 `json:"league_id"`
|
||||
}
|
||||
|
||||
type RaffleTicket struct {
|
||||
ID int32 `json:"id"`
|
||||
RaffleID int32 `json:"raffle_id"`
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: monitor.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: notification.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: odd_history.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: odds.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: otp.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: raffle.sql
|
||||
|
||||
package dbgen
|
||||
|
|
@ -11,6 +11,30 @@ import (
|
|||
"github.com/jackc/pgx/v5/pgtype"
|
||||
)
|
||||
|
||||
const AddSportRaffleFilter = `-- name: AddSportRaffleFilter :one
|
||||
INSERT INTO raffle_sport_filters (raffle_id, sport_id, league_id)
|
||||
VALUES ($1, $2, $3)
|
||||
RETURNING id, raffle_id, sport_id, league_id
|
||||
`
|
||||
|
||||
type AddSportRaffleFilterParams struct {
|
||||
RaffleID int32 `json:"raffle_id"`
|
||||
SportID int64 `json:"sport_id"`
|
||||
LeagueID int64 `json:"league_id"`
|
||||
}
|
||||
|
||||
func (q *Queries) AddSportRaffleFilter(ctx context.Context, arg AddSportRaffleFilterParams) (RaffleSportFilter, error) {
|
||||
row := q.db.QueryRow(ctx, AddSportRaffleFilter, arg.RaffleID, arg.SportID, arg.LeagueID)
|
||||
var i RaffleSportFilter
|
||||
err := row.Scan(
|
||||
&i.ID,
|
||||
&i.RaffleID,
|
||||
&i.SportID,
|
||||
&i.LeagueID,
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
|
||||
const CreateRaffle = `-- name: CreateRaffle :one
|
||||
INSERT INTO raffles (company_id, name, expires_at, type)
|
||||
VALUES ($1, $2, $3, $4)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: referal.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: report.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: result.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: result_log.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: settings.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: shop_transactions.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: ticket.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: transfer.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: user.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: virtual_games.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.29.0
|
||||
// sqlc v1.30.0
|
||||
// source: wallet.sql
|
||||
|
||||
package dbgen
|
||||
|
|
|
|||
|
|
@ -12,6 +12,15 @@ type Raffle struct {
|
|||
Status string
|
||||
}
|
||||
|
||||
type RaffleFilter struct {
|
||||
// requireds will depend on type of raffle (sport or game)
|
||||
Type string `json:"type" validate:"required,oneof=sport game"`
|
||||
RaffleID int32 `json:"raffle_id" validate:"required"`
|
||||
SportID int32 `json:"sport_id" validate:"required_if=Type sport"`
|
||||
LeagueID int32 `json:"league_id" validate:"required_if=Type sport"`
|
||||
GameID string `json:"game_id" validate:"required_if=Type game"`
|
||||
}
|
||||
|
||||
type RaffleStanding struct {
|
||||
UserID int64
|
||||
RaffleID int32
|
||||
|
|
|
|||
|
|
@ -169,3 +169,12 @@ func (s *Store) CreateRaffleWinner(ctx context.Context, raffleWinnerParams domai
|
|||
func (s *Store) SetRaffleComplete(ctx context.Context, raffleID int32) error {
|
||||
return s.queries.SetRaffleComplete(ctx, raffleID)
|
||||
}
|
||||
|
||||
func (s *Store) AddSportRaffleFilter(ctx context.Context, raffleID int32, sportID, leagueID int64) error {
|
||||
_, err := s.queries.AddSportRaffleFilter(ctx, dbgen.AddSportRaffleFilterParams{
|
||||
RaffleID: raffleID,
|
||||
SportID: sportID,
|
||||
LeagueID: leagueID,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,11 +9,13 @@ import (
|
|||
|
||||
type RaffleStore interface {
|
||||
CreateRaffle(ctx context.Context, raffle domain.CreateRaffle) (domain.Raffle, error)
|
||||
AddSportRaffleFilter(ctx context.Context, raffleID int32, sportID, leagueID int64) error
|
||||
DeleteRaffle(ctx context.Context, raffleID int32) (domain.Raffle, error)
|
||||
GetRafflesOfCompany(ctx context.Context, companyID int32) ([]dbgen.Raffle, error)
|
||||
GetRaffleStanding(ctx context.Context, raffleID, limit int32) ([]domain.RaffleStanding, error)
|
||||
CreateRaffleWinner(ctx context.Context, raffleWinnerParams domain.RaffleWinnerParams) error
|
||||
SetRaffleComplete(ctx context.Context, raffleID int32) error
|
||||
|
||||
CreateRaffleTicket(ctx context.Context, raffleTicketParams domain.CreateRaffleTicket) (domain.RaffleTicket, error)
|
||||
GetUserRaffleTickets(ctx context.Context, userID int32) ([]domain.RaffleTicketRes, error)
|
||||
SuspendRaffleTicket(ctx context.Context, raffleTicketID int32) error
|
||||
|
|
|
|||
|
|
@ -21,6 +21,10 @@ func (s *Service) CreateRaffle(ctx context.Context, raffle domain.CreateRaffle)
|
|||
return s.raffleStore.CreateRaffle(ctx, raffle)
|
||||
}
|
||||
|
||||
func (s *Service) AddSportRaffleFilter(ctx context.Context, raffleID int32, sportID, leagueID int64) error {
|
||||
return s.raffleStore.AddSportRaffleFilter(ctx, raffleID, sportID, leagueID)
|
||||
}
|
||||
|
||||
func (s *Service) DeleteRaffle(ctx context.Context, raffleID int32) (domain.Raffle, error) {
|
||||
return s.raffleStore.DeleteRaffle(ctx, raffleID)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,6 +50,50 @@ func (h *Handler) CreateRaffle(c *fiber.Ctx) error {
|
|||
return response.WriteJSON(c, fiber.StatusOK, "Raffle created successfully", raffle, nil)
|
||||
}
|
||||
|
||||
func (h *Handler) AddRaffleFilter(c *fiber.Ctx) error {
|
||||
var filter domain.RaffleFilter
|
||||
|
||||
if err := c.BodyParser(&filter); err != nil {
|
||||
h.mongoLoggerSvc.Info("Failed to parse raffle filter request",
|
||||
zap.Int("status_code", fiber.StatusBadRequest),
|
||||
zap.Error(err),
|
||||
zap.Time("timestamp", time.Now()),
|
||||
)
|
||||
return fiber.NewError(fiber.StatusBadRequest, "Invalid request body")
|
||||
}
|
||||
|
||||
if valErrs, ok := h.validator.Validate(c, filter); !ok {
|
||||
var errMsg string
|
||||
for field, msg := range valErrs {
|
||||
errMsg += fmt.Sprintf("%s: %s; ", field, msg)
|
||||
}
|
||||
h.mongoLoggerSvc.Info("Failed to validate raffle filter",
|
||||
zap.String("errMsg", errMsg),
|
||||
zap.Int("status_code", fiber.StatusBadRequest),
|
||||
zap.Time("timestamp", time.Now()),
|
||||
)
|
||||
return fiber.NewError(fiber.StatusBadRequest, errMsg)
|
||||
}
|
||||
|
||||
switch filter.Type {
|
||||
case "sport":
|
||||
err := h.raffleSvc.AddSportRaffleFilter(c.Context(), filter.RaffleID, int64(filter.SportID), int64(filter.LeagueID))
|
||||
if err != nil {
|
||||
h.mongoLoggerSvc.Error("Failed to add raffle filter",
|
||||
zap.Int("status_code", fiber.StatusInternalServerError),
|
||||
zap.Error(err),
|
||||
zap.Time("timestamp", time.Now()),
|
||||
)
|
||||
return fiber.NewError(fiber.StatusInternalServerError, "Failed to add raffle filter")
|
||||
}
|
||||
|
||||
// handle game case below
|
||||
// there won't be a default case since its being handled in the validator
|
||||
}
|
||||
|
||||
return response.WriteJSON(c, fiber.StatusOK, "Raffle filter added successfully", nil, nil)
|
||||
}
|
||||
|
||||
func (h *Handler) DeleteRaffle(c *fiber.Ctx) error {
|
||||
stringRaffleID := c.Params("id")
|
||||
raffleID, err := strconv.Atoi(stringRaffleID)
|
||||
|
|
|
|||
|
|
@ -201,9 +201,11 @@ func (a *App) initAppRoutes() {
|
|||
tenant.Get("/raffle/list", h.GetTenantRaffles)
|
||||
a.fiber.Get("/raffle/standing/:id/:limit", h.GetRaffleStanding) //This needs to be accessible by non-login user
|
||||
a.fiber.Post("/raffle/create", a.authMiddleware, h.CreateRaffle)
|
||||
a.fiber.Post("/raffle/add-filter", a.authMiddleware, h.AddRaffleFilter)
|
||||
a.fiber.Get("/raffle/delete/:id", a.authMiddleware, h.DeleteRaffle)
|
||||
a.fiber.Get("/raffle/company/:id", a.authMiddleware, h.GetRafflesOfCompany)
|
||||
a.fiber.Get("raffle/winners/:id/:limit", a.authMiddleware, h.GetRaffleWinners)
|
||||
|
||||
a.fiber.Post("/raffle-ticket/create", a.authMiddleware, h.CreateRaffleTicket)
|
||||
a.fiber.Get("/raffle-ticket/:id", a.authMiddleware, h.GetUserRaffleTickets)
|
||||
a.fiber.Get("/raffle-ticket/suspend/:id", a.authMiddleware, h.SuspendRaffleTicket)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user