324 lines
10 KiB
Go
324 lines
10 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
func (s *Store) CreateEnetpulseSport(ctx context.Context, sport domain.CreateEnetpulseSport) (domain.EnetpulseSport, error) {
|
|
// Convert domain model to DB model if needed
|
|
dbSport, err := s.queries.CreateEnetpulseSport(ctx, ConvertCreateEnetpulseSport(sport))
|
|
if err != nil {
|
|
return domain.EnetpulseSport{}, err
|
|
}
|
|
return ConvertDBEnetpulseSport(dbSport), nil
|
|
}
|
|
|
|
// Fetch all sports
|
|
func (s *Store) GetAllEnetpulseSports(ctx context.Context) ([]domain.EnetpulseSport, error) {
|
|
dbSports, err := s.queries.GetAllEnetpulseSports(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var sports []domain.EnetpulseSport
|
|
for _, dbSport := range dbSports {
|
|
sports = append(sports, ConvertDBEnetpulseSport(dbSport))
|
|
}
|
|
|
|
return sports, nil
|
|
}
|
|
|
|
func (s *Store) CreateEnetpulseTournamentTemplate(
|
|
ctx context.Context,
|
|
template domain.CreateEnetpulseTournamentTemplate,
|
|
) (domain.EnetpulseTournamentTemplate, error) {
|
|
// Convert domain model to DB model if needed
|
|
dbTemplate, err := s.queries.CreateEnetpulseTournamentTemplate(
|
|
ctx,
|
|
ConvertCreateEnetpulseTournamentTemplate(template),
|
|
)
|
|
if err != nil {
|
|
return domain.EnetpulseTournamentTemplate{}, err
|
|
}
|
|
return ConvertDBEnetpulseTournamentTemplate(dbTemplate), nil
|
|
}
|
|
|
|
// Fetch all tournament templates
|
|
func (s *Store) GetAllEnetpulseTournamentTemplates(ctx context.Context) ([]domain.EnetpulseTournamentTemplate, error) {
|
|
dbTemplates, err := s.queries.GetAllEnetpulseTournamentTemplates(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var templates []domain.EnetpulseTournamentTemplate
|
|
for _, dbTemplate := range dbTemplates {
|
|
templates = append(templates, ConvertDBEnetpulseTournamentTemplate(dbTemplate))
|
|
}
|
|
|
|
return templates, nil
|
|
}
|
|
|
|
// Store.go
|
|
func (s *Store) CreateEnetpulseTournament(
|
|
ctx context.Context,
|
|
tournament domain.CreateEnetpulseTournament,
|
|
) (domain.EnetpulseTournament, error) {
|
|
// Convert domain model to DB model if needed
|
|
dbTournament, err := s.queries.CreateEnetpulseTournament(
|
|
ctx,
|
|
ConvertCreateEnetpulseTournament(tournament),
|
|
)
|
|
if err != nil {
|
|
return domain.EnetpulseTournament{}, err
|
|
}
|
|
return ConvertDBEnetpulseTournament(dbTournament), nil
|
|
}
|
|
|
|
// store.go
|
|
func (s *Store) GetAllEnetpulseTournaments(ctx context.Context) ([]domain.EnetpulseTournament, error) {
|
|
dbTournaments, err := s.queries.GetAllEnetpulseTournaments(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var tournaments []domain.EnetpulseTournament
|
|
for _, dbT := range dbTournaments {
|
|
tournaments = append(tournaments, ConvertDBEnetpulseTournament(dbT))
|
|
}
|
|
|
|
return tournaments, nil
|
|
}
|
|
|
|
func (s *Store) CreateEnetpulseTournamentStage(
|
|
ctx context.Context,
|
|
stage domain.CreateEnetpulseTournamentStage,
|
|
) (domain.EnetpulseTournamentStage, error) {
|
|
// Convert domain model to DB model if needed
|
|
dbStage, err := s.queries.CreateEnetpulseTournamentStage(
|
|
ctx,
|
|
ConvertCreateEnetpulseTournamentStage(stage),
|
|
)
|
|
if err != nil {
|
|
return domain.EnetpulseTournamentStage{}, err
|
|
}
|
|
return ConvertDBEnetpulseTournamentStage(dbStage), nil
|
|
}
|
|
|
|
// Fetch all tournament stages
|
|
func (s *Store) GetAllEnetpulseTournamentStages(ctx context.Context) ([]domain.EnetpulseTournamentStage, error) {
|
|
dbStages, err := s.queries.GetAllEnetpulseTournamentStages(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var stages []domain.EnetpulseTournamentStage
|
|
for _, dbStage := range dbStages {
|
|
stages = append(stages, ConvertDBEnetpulseTournamentStage(dbStage))
|
|
}
|
|
|
|
return stages, nil
|
|
}
|
|
|
|
// Optional: Fetch stages by TournamentFK
|
|
func (s *Store) GetTournamentStagesByTournamentFK(ctx context.Context, tournamentFK string) ([]domain.EnetpulseTournamentStage, error) {
|
|
dbStages, err := s.queries.GetTournamentStagesByTournamentFK(ctx, tournamentFK)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var stages []domain.EnetpulseTournamentStage
|
|
for _, dbStage := range dbStages {
|
|
stages = append(stages, ConvertDBEnetpulseTournamentStage(dbStage))
|
|
}
|
|
|
|
return stages, nil
|
|
}
|
|
|
|
// func ConvertCreateEnetpulseTournamentStage(stage domain.CreateEnetpulseTournamentStage) dbgen.EnetpulseTournamentStage {
|
|
// return dbgen.EnetpulseTournamentStage{
|
|
// StageID: stage.StageID,
|
|
// Name: stage.Name,
|
|
// TournamentFK: stage.TournamentFK,
|
|
// Gender: stage.Gender,
|
|
// CountryFK: stage.CountryFK,
|
|
// StartDate: stage.StartDate,
|
|
// EndDate: stage.EndDate,
|
|
// UpdatesCount: int32(stage.UpdatesCount),
|
|
// LastUpdatedAt: stage.LastUpdatedAt,
|
|
// CountryName: stage.CountryName,
|
|
// Status: int32(stage.Status),
|
|
// UpdatedAt: time.Now(),
|
|
// }
|
|
// }
|
|
|
|
func ConvertCreateEnetpulseTournamentStage(stage domain.CreateEnetpulseTournamentStage) dbgen.CreateEnetpulseTournamentStageParams {
|
|
return dbgen.CreateEnetpulseTournamentStageParams{
|
|
StageID: stage.StageID,
|
|
Name: stage.Name,
|
|
TournamentFk: stage.TournamentFK,
|
|
Gender: pgtype.Text{String: stage.Gender, Valid: stage.Gender != ""},
|
|
CountryFk: pgtype.Text{String: stage.CountryFK, Valid: stage.CountryFK != ""},
|
|
StartDate: pgtype.Timestamptz{Time: stage.StartDate, Valid: !stage.StartDate.IsZero()},
|
|
EndDate: pgtype.Timestamptz{Time: stage.EndDate, Valid: !stage.EndDate.IsZero()},
|
|
UpdatesCount: pgtype.Int4{Int32: int32(stage.UpdatesCount), Valid: true},
|
|
LastUpdatedAt: pgtype.Timestamptz{Time: stage.LastUpdatedAt, Valid: !stage.LastUpdatedAt.IsZero()},
|
|
CountryName: pgtype.Text{String: stage.CountryName, Valid: stage.CountryFK != ""},
|
|
Status: pgtype.Int4{Int32: int32(stage.Status), Valid: true},
|
|
// Las: pgtype.Timestamptz{Time: time.Now(), Valid: true},
|
|
}
|
|
}
|
|
|
|
func ConvertDBEnetpulseTournamentStage(db dbgen.EnetpulseTournamentStage) domain.EnetpulseTournamentStage {
|
|
return domain.EnetpulseTournamentStage{
|
|
ID: db.ID,
|
|
StageID: db.StageID,
|
|
Name: db.Name,
|
|
TournamentFK: db.TournamentFk,
|
|
Gender: db.Gender.String,
|
|
CountryFK: db.CountryFk.String,
|
|
StartDate: db.StartDate.Time,
|
|
EndDate: db.EndDate.Time,
|
|
UpdatesCount: func() int {
|
|
if db.UpdatesCount.Valid {
|
|
return int(db.UpdatesCount.Int32)
|
|
}
|
|
return 0
|
|
}(),
|
|
LastUpdatedAt: db.LastUpdatedAt.Time,
|
|
CountryName: db.CountryName.String,
|
|
Status: func() int {
|
|
if db.Status.Valid {
|
|
return int(db.Status.Int32)
|
|
}
|
|
return 0
|
|
}(),
|
|
CreatedAt: db.CreatedAt.Time,
|
|
UpdatedAt: db.UpdatedAt.Time,
|
|
}
|
|
}
|
|
|
|
func ConvertCreateEnetpulseSport(s domain.CreateEnetpulseSport) dbgen.CreateEnetpulseSportParams {
|
|
return dbgen.CreateEnetpulseSportParams{
|
|
SportID: s.SportID,
|
|
Name: s.Name,
|
|
UpdatesCount: pgtype.Int4{Int32: int32(s.UpdatesCount), Valid: true}, // SQLC might use int32
|
|
LastUpdatedAt: pgtype.Timestamptz{Time: s.LastUpdatedAt, Valid: true},
|
|
Status: pgtype.Int4{Int32: int32(s.Status), Valid: true},
|
|
// UpdatedAt: nil, // SQLC will default NOW() if nil
|
|
}
|
|
}
|
|
|
|
func ConvertDBEnetpulseSport(db dbgen.EnetpulseSport) domain.EnetpulseSport {
|
|
return domain.EnetpulseSport{
|
|
ID: db.ID,
|
|
SportID: db.SportID,
|
|
Name: db.Name,
|
|
UpdatesCount: func() int {
|
|
if db.UpdatesCount.Valid {
|
|
return int(db.UpdatesCount.Int32)
|
|
}
|
|
return 0 // or another default value if needed
|
|
}(), // cast from int32
|
|
LastUpdatedAt: db.LastUpdatedAt.Time,
|
|
Status: func() int {
|
|
if db.Status.Valid {
|
|
return int(db.Status.Int32)
|
|
}
|
|
return 0 // or another default value if needed
|
|
}(), // cast from int32
|
|
CreatedAt: db.CreatedAt.Time,
|
|
UpdatedAt: db.UpdatedAt.Time,
|
|
}
|
|
}
|
|
|
|
func ConvertDBEnetpulseTournamentTemplate(db dbgen.EnetpulseTournamentTemplate) domain.EnetpulseTournamentTemplate {
|
|
return domain.EnetpulseTournamentTemplate{
|
|
ID: db.ID,
|
|
TemplateID: db.TemplateID,
|
|
Name: db.Name,
|
|
SportFK: db.SportFk,
|
|
Gender: func() string {
|
|
if db.Gender.Valid {
|
|
return db.Gender.String
|
|
}
|
|
return ""
|
|
}(),
|
|
UpdatesCount: func() int {
|
|
if db.UpdatesCount.Valid {
|
|
return int(db.UpdatesCount.Int32)
|
|
}
|
|
return 0
|
|
}(),
|
|
LastUpdatedAt: db.LastUpdatedAt.Time,
|
|
Status: func() int {
|
|
if db.Status.Valid {
|
|
return int(db.Status.Int32)
|
|
}
|
|
return 0
|
|
}(),
|
|
CreatedAt: db.CreatedAt.Time,
|
|
UpdatedAt: db.UpdatedAt.Time,
|
|
}
|
|
}
|
|
|
|
func ConvertCreateEnetpulseTournamentTemplate(
|
|
t domain.CreateEnetpulseTournamentTemplate,
|
|
) dbgen.CreateEnetpulseTournamentTemplateParams {
|
|
return dbgen.CreateEnetpulseTournamentTemplateParams{
|
|
TemplateID: t.TemplateID,
|
|
SportFk: fmt.Sprintf("%d", t.SportFK),
|
|
Gender: pgtype.Text{String: t.Gender, Valid: t.Gender != ""},
|
|
UpdatesCount: pgtype.Int4{Int32: int32(t.UpdatesCount), Valid: true},
|
|
LastUpdatedAt: pgtype.Timestamptz{Time: t.LastUpdatedAt, Valid: true},
|
|
Status: pgtype.Int4{Int32: int32(t.Status), Valid: true},
|
|
}
|
|
}
|
|
|
|
// Convert domain to DB insert struct for sqlc
|
|
func ConvertCreateEnetpulseTournament(t domain.CreateEnetpulseTournament) dbgen.CreateEnetpulseTournamentParams {
|
|
return dbgen.CreateEnetpulseTournamentParams{
|
|
TournamentID: t.TournamentID,
|
|
Name: t.Name,
|
|
TournamentTemplateFk: t.TournamentTemplateFK,
|
|
UpdatesCount: pgtype.Int4{Int32: int32(t.UpdatesCount), Valid: true},
|
|
LastUpdatedAt: pgtype.Timestamptz{Time: t.LastUpdatedAt, Valid: !t.LastUpdatedAt.IsZero()},
|
|
Status: pgtype.Int4{Int32: int32(t.Status), Valid: true},
|
|
}
|
|
}
|
|
|
|
// Convert DB row to domain model
|
|
func ConvertDBEnetpulseTournament(dbT dbgen.EnetpulseTournament) domain.EnetpulseTournament {
|
|
return domain.EnetpulseTournament{
|
|
ID: dbT.ID,
|
|
TournamentID: dbT.TournamentID,
|
|
Name: dbT.Name,
|
|
TournamentTemplateFK: dbT.TournamentTemplateFk,
|
|
UpdatesCount: func() int {
|
|
if dbT.UpdatesCount.Valid {
|
|
return int(dbT.UpdatesCount.Int32)
|
|
}
|
|
return 0
|
|
}(),
|
|
LastUpdatedAt: dbT.LastUpdatedAt.Time,
|
|
Status: func() int {
|
|
if dbT.Status.Valid {
|
|
return int(dbT.Status.Int32)
|
|
}
|
|
return 0
|
|
}(),
|
|
CreatedAt: dbT.CreatedAt.Time,
|
|
UpdatedAt: func() *time.Time {
|
|
if dbT.UpdatedAt.Valid {
|
|
return &dbT.UpdatedAt.Time
|
|
}
|
|
return nil
|
|
}(),
|
|
}
|
|
}
|