101 lines
3.2 KiB
Go
101 lines
3.2 KiB
Go
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 convertDBResult(result dbgen.Result) domain.Result {
|
|
scores := make(map[string]domain.Score)
|
|
return domain.Result{
|
|
ID: result.ID,
|
|
BetOutcomeID: result.BetOutcomeID,
|
|
EventID: result.EventID,
|
|
OddID: result.OddID,
|
|
MarketID: result.MarketID,
|
|
Status: domain.OutcomeStatus(result.Status),
|
|
Score: result.Score.String,
|
|
FullTimeScore: result.FullTimeScore.String,
|
|
HalfTimeScore: result.HalfTimeScore.String,
|
|
SS: result.Ss.String,
|
|
Scores: scores,
|
|
CreatedAt: result.CreatedAt.Time,
|
|
UpdatedAt: result.UpdatedAt.Time,
|
|
}
|
|
}
|
|
|
|
func convertCreateResult(result domain.CreateResult) dbgen.CreateResultParams {
|
|
return dbgen.CreateResultParams{
|
|
BetOutcomeID: result.BetOutcomeID,
|
|
EventID: result.EventID,
|
|
OddID: result.OddID,
|
|
MarketID: result.MarketID,
|
|
Status: int32(result.Status),
|
|
Score: pgtype.Text{String: result.Score},
|
|
}
|
|
}
|
|
|
|
func convertResult(result domain.Result) dbgen.InsertResultParams {
|
|
return dbgen.InsertResultParams{
|
|
BetOutcomeID: result.BetOutcomeID,
|
|
EventID: result.EventID,
|
|
OddID: result.OddID,
|
|
MarketID: result.MarketID,
|
|
Status: int32(result.Status),
|
|
Score: pgtype.Text{String: result.Score},
|
|
FullTimeScore: pgtype.Text{String: result.FullTimeScore},
|
|
HalfTimeScore: pgtype.Text{String: result.HalfTimeScore},
|
|
Ss: pgtype.Text{String: result.SS},
|
|
}
|
|
}
|
|
|
|
func (s *Store) CreateResult(ctx context.Context, result domain.CreateResult) (domain.Result, error) {
|
|
dbResult, err := s.queries.CreateResult(ctx, convertCreateResult(result))
|
|
if err != nil {
|
|
return domain.Result{}, err
|
|
}
|
|
return convertDBResult(dbResult), nil
|
|
}
|
|
|
|
func (s *Store) InsertResult(ctx context.Context, result domain.Result) error {
|
|
return s.queries.InsertResult(ctx, convertResult(result))
|
|
}
|
|
|
|
func (s *Store) GetResultByBetOutcomeID(ctx context.Context, betOutcomeID int64) (domain.Result, error) {
|
|
dbResult, err := s.queries.GetResultByBetOutcomeID(ctx, betOutcomeID)
|
|
if err != nil {
|
|
return domain.Result{}, err
|
|
}
|
|
return convertDBResult(dbResult), nil
|
|
}
|
|
|
|
func (s *Store) GetPendingBetOutcomes(ctx context.Context) ([]domain.BetOutcome, error) {
|
|
dbOutcomes, err := s.queries.GetPendingBetOutcomes(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
outcomes := make([]domain.BetOutcome, 0, len(dbOutcomes))
|
|
for _, dbOutcome := range dbOutcomes {
|
|
outcomes = append(outcomes, domain.BetOutcome{
|
|
ID: dbOutcome.ID,
|
|
BetID: dbOutcome.BetID,
|
|
EventID: dbOutcome.EventID,
|
|
OddID: dbOutcome.OddID,
|
|
HomeTeamName: dbOutcome.HomeTeamName,
|
|
AwayTeamName: dbOutcome.AwayTeamName,
|
|
MarketID: dbOutcome.MarketID,
|
|
MarketName: dbOutcome.MarketName,
|
|
Odd: dbOutcome.Odd,
|
|
OddName: dbOutcome.OddName,
|
|
OddHeader: dbOutcome.OddHeader,
|
|
OddHandicap: dbOutcome.OddHandicap,
|
|
Status: domain.OutcomeStatus(dbOutcome.Status),
|
|
Expires: dbOutcome.Expires.Time,
|
|
})
|
|
}
|
|
return outcomes, nil
|
|
}
|