157 lines
4.5 KiB
Go
157 lines
4.5 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
|
|
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/ports"
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
// Interface for creating new raffle store
|
|
func NewRaffleStore(s *Store) ports.RaffleStore { return s }
|
|
|
|
func (s *Store) CreateRaffle(ctx context.Context, raffle domain.CreateRaffle) (domain.Raffle, error) {
|
|
raffleRes, err := s.queries.CreateRaffle(ctx, domain.ConvertCreateRaffle(raffle))
|
|
if err != nil {
|
|
return domain.Raffle{}, err
|
|
}
|
|
|
|
return domain.ConvertRaffleOutcome(raffleRes), nil
|
|
}
|
|
|
|
func (s *Store) DeleteRaffle(ctx context.Context, raffleID int32) (domain.Raffle, error) {
|
|
raffleRes, err := s.queries.DeleteRaffle(ctx, raffleID)
|
|
if err != nil {
|
|
return domain.Raffle{}, err
|
|
}
|
|
|
|
return domain.ConvertRaffleOutcome(raffleRes), nil
|
|
}
|
|
|
|
func (s *Store) GetRafflesOfCompany(ctx context.Context, companyID int32) ([]dbgen.Raffle, error) {
|
|
raffles, err := s.queries.GetRafflesOfCompany(ctx, companyID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return raffles, nil
|
|
}
|
|
|
|
func (s *Store) CreateRaffleTicket(ctx context.Context, raffleTicketParams domain.CreateRaffleTicket) (domain.RaffleTicket, error) {
|
|
raffleTicket, err := s.queries.CreateRaffleTicket(ctx, dbgen.CreateRaffleTicketParams{
|
|
RaffleID: raffleTicketParams.RaffleID,
|
|
UserID: raffleTicketParams.UserID,
|
|
})
|
|
if err != nil {
|
|
return domain.RaffleTicket{}, err
|
|
}
|
|
|
|
return domain.ConvertRaffleTicketOutcome(raffleTicket), nil
|
|
}
|
|
|
|
func (s *Store) GetUserRaffleTickets(ctx context.Context, userID int32) ([]domain.RaffleTicketRes, error) {
|
|
raffleTickets, err := s.queries.GetUserRaffleTickets(ctx, userID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
res := []domain.RaffleTicketRes{}
|
|
for _, raffle := range raffleTickets {
|
|
res = append(res, domain.ConvertJoinedRaffleTicketOutcome(raffle))
|
|
}
|
|
|
|
return res, nil
|
|
}
|
|
|
|
func (s *Store) SuspendRaffleTicket(ctx context.Context, raffleTicketID int32) error {
|
|
return s.queries.UpdateRaffleTicketStatus(ctx, dbgen.UpdateRaffleTicketStatusParams{
|
|
ID: raffleTicketID,
|
|
IsActive: pgtype.Bool{
|
|
Bool: false,
|
|
Valid: true,
|
|
},
|
|
})
|
|
}
|
|
|
|
func (s *Store) UnSuspendRaffleTicket(ctx context.Context, raffleID int32) error {
|
|
return s.queries.UpdateRaffleTicketStatus(ctx, dbgen.UpdateRaffleTicketStatusParams{
|
|
ID: raffleID,
|
|
IsActive: pgtype.Bool{
|
|
Bool: true,
|
|
Valid: true,
|
|
},
|
|
})
|
|
}
|
|
|
|
// TODO: could also add -> suspend a specific user's raffle tickets
|
|
|
|
func (s *Store) GetRaffleStanding(ctx context.Context, raffleID, limit int32) ([]domain.RaffleStanding, error) {
|
|
raffleStanding, err := s.queries.GetRaffleStanding(ctx, dbgen.GetRaffleStandingParams{
|
|
RaffleID: raffleID,
|
|
Limit: limit,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
res := []domain.RaffleStanding{}
|
|
for _, standing := range raffleStanding {
|
|
res = append(res, domain.ConvertRaffleStanding(standing))
|
|
}
|
|
|
|
return res, nil
|
|
}
|
|
|
|
func (s *Store) CreateRaffleWinner(ctx context.Context, raffleWinnerParams domain.RaffleWinnerParams) error {
|
|
_, err := s.queries.CreateRaffleWinner(ctx, dbgen.CreateRaffleWinnerParams{
|
|
RaffleID: raffleWinnerParams.RaffleID,
|
|
UserID: raffleWinnerParams.UserID,
|
|
Rank: raffleWinnerParams.Rank,
|
|
})
|
|
|
|
return err
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
func (s *Store) CheckValidSportRaffleFilter(ctx context.Context, raffleID int32, sportID, leagueID int64) (bool, error) {
|
|
res, err := s.queries.CheckValidSportRaffleFilter(ctx, dbgen.CheckValidSportRaffleFilterParams{
|
|
RaffleID: raffleID,
|
|
SportID: sportID,
|
|
LeagueID: leagueID,
|
|
})
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
return res, nil
|
|
}
|
|
|
|
func (s *Store) GetRaffleTicketLimit(ctx context.Context, raffleID int32) (int32, error) {
|
|
return s.queries.GetRaffleTicketLimit(ctx, raffleID)
|
|
}
|
|
|
|
func (s *Store) GetRaffleTicketCount(ctx context.Context, raffleID, userID int32) (int64, error) {
|
|
return s.queries.GetRaffleTicketCount(ctx, dbgen.GetRaffleTicketCountParams{
|
|
RaffleID: raffleID,
|
|
UserID: userID,
|
|
})
|
|
}
|
|
|
|
func (s *Store) CheckSportRaffleHasFilter(ctx context.Context, raffleID int32) (bool, error) {
|
|
return s.queries.CheckSportRaffleHasFilter(ctx, raffleID)
|
|
}
|