Yimaru-BackEnd/internal/repository/enet_pulse.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
}(),
}
}