package repository import ( "context" dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db" "github.com/SamuelTariku/FortuneBet-Backend/internal/domain" "github.com/jackc/pgx/v5/pgtype" ) func convertDBBet(bet dbgen.Bet) domain.Bet { return domain.Bet{ ID: bet.ID, Amount: domain.Currency(bet.Amount), TotalOdds: bet.TotalOdds, Status: domain.BetStatus(bet.Status), FullName: bet.FullName, PhoneNumber: bet.PhoneNumber, BranchID: domain.ValidInt64{ Value: bet.BranchID.Int64, Valid: bet.BranchID.Valid, }, UserID: domain.ValidInt64{ Value: bet.UserID.Int64, Valid: bet.UserID.Valid, }, IsShopBet: bet.IsShopBet, CashedOut: bet.CashedOut, CashoutID: bet.CashoutID, } } func convertDBBetOutcomes(bet dbgen.BetWithOutcome) domain.GetBet { var outcomes []domain.BetOutcome = make([]domain.BetOutcome, len(bet.Outcomes)) for _, outcome := range bet.Outcomes { outcomes = append(outcomes, domain.BetOutcome{ ID: outcome.ID, BetID: outcome.BetID, EventID: outcome.EventID, OddID: outcome.OddID, }) } return domain.GetBet{ ID: bet.ID, Amount: domain.Currency(bet.Amount), TotalOdds: bet.TotalOdds, Status: domain.BetStatus(bet.Status), FullName: bet.FullName, PhoneNumber: bet.PhoneNumber, BranchID: domain.ValidInt64{ Value: bet.BranchID.Int64, Valid: bet.BranchID.Valid, }, UserID: domain.ValidInt64{ Value: bet.UserID.Int64, Valid: bet.UserID.Valid, }, IsShopBet: bet.IsShopBet, CashedOut: bet.CashedOut, CashoutID: bet.CashoutID, Outcomes: outcomes, } } func convertCreateBet(bet domain.CreateBet) dbgen.CreateBetParams { return dbgen.CreateBetParams{ Amount: int64(bet.Amount), TotalOdds: bet.TotalOdds, Status: int32(bet.Status), FullName: bet.FullName, PhoneNumber: bet.PhoneNumber, BranchID: pgtype.Int8{ Int64: bet.BranchID.Value, Valid: bet.BranchID.Valid, }, UserID: pgtype.Int8{ Int64: bet.UserID.Value, Valid: bet.UserID.Valid, }, IsShopBet: bet.IsShopBet, CashoutID: bet.CashoutID, } } func (s *Store) CreateBet(ctx context.Context, bet domain.CreateBet) (domain.Bet, error) { newBet, err := s.queries.CreateBet(ctx, convertCreateBet(bet)) if err != nil { return domain.Bet{}, err } return convertDBBet(newBet), err } func (s *Store) CreateBetOutcome(ctx context.Context, outcomes []domain.CreateBetOutcome) (int64, error) { var dbParams []dbgen.CreateBetOutcomeParams = make([]dbgen.CreateBetOutcomeParams, 0, len(outcomes)) for _, outcome := range outcomes { dbParams = append(dbParams, dbgen.CreateBetOutcomeParams{ BetID: outcome.BetID, EventID: outcome.EventID, OddID: outcome.OddID, }) } rows, err := s.queries.CreateBetOutcome(ctx, dbParams) if err != nil { return rows, err } return rows, nil } func (s *Store) GetBetByID(ctx context.Context, id int64) (domain.GetBet, error) { bet, err := s.queries.GetBetByID(ctx, id) if err != nil { return domain.GetBet{}, err } return convertDBBetOutcomes(bet), nil } func (s *Store) GetAllBets(ctx context.Context) ([]domain.GetBet, error) { bets, err := s.queries.GetAllBets(ctx) if err != nil { return nil, err } var result []domain.GetBet = make([]domain.GetBet, 0, len(bets)) for _, bet := range bets { result = append(result, convertDBBetOutcomes(bet)) } return result, nil } func (s *Store) GetBetByBranchID(ctx context.Context, BranchID int64) ([]domain.GetBet, error) { bets, err := s.queries.GetBetByBranchID(ctx, pgtype.Int8{ Int64: BranchID, Valid: true, }) if err != nil { return nil, err } var result []domain.GetBet = make([]domain.GetBet, 0, len(bets)) for _, bet := range bets { result = append(result, convertDBBetOutcomes(bet)) } return result, nil } func (s *Store) UpdateCashOut(ctx context.Context, id int64, cashedOut bool) error { err := s.queries.UpdateCashOut(ctx, dbgen.UpdateCashOutParams{ ID: id, CashedOut: cashedOut, }) return err } func (s *Store) DeleteBet(ctx context.Context, id int64) error { return s.queries.DeleteBet(ctx, id) }