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 (s *Store) GetEventsWithSettings(ctx context.Context, companyID int64, filter domain.EventFilter) ([]domain.EventWithSettings, int64, error) { events, err := s.queries.GetEventsWithSettings(ctx, dbgen.GetEventsWithSettingsParams{ CompanyID: companyID, LeagueID: filter.LeagueID.ToPG(), SportID: filter.SportID.ToPG(), Query: filter.Query.ToPG(), Limit: filter.Limit.ToPG(), Offset: pgtype.Int4{ Int32: int32(filter.Offset.Value * filter.Limit.Value), Valid: filter.Offset.Valid, }, FirstStartTime: filter.FirstStartTime.ToPG(), LastStartTime: filter.LastStartTime.ToPG(), CountryCode: filter.CountryCode.ToPG(), IsFeatured: filter.Featured.ToPG(), IsActive: filter.Active.ToPG(), IsLive: filter.IsLive.ToPG(), Status: filter.Status.ToPG(), Source: filter.Source.ToPG(), }) if err != nil { return nil, 0, err } totalCount, err := s.queries.GetTotalCompanyEvents(ctx, dbgen.GetTotalCompanyEventsParams{ CompanyID: companyID, LeagueID: filter.LeagueID.ToPG(), SportID: filter.SportID.ToPG(), Query: filter.Query.ToPG(), FirstStartTime: filter.FirstStartTime.ToPG(), LastStartTime: filter.LastStartTime.ToPG(), CountryCode: filter.CountryCode.ToPG(), IsFeatured: filter.Featured.ToPG(), IsActive: filter.Active.ToPG(), IsLive: filter.IsLive.ToPG(), Status: filter.Status.ToPG(), Source: filter.Source.ToPG(), }) if err != nil { return nil, 0, err } result := make([]domain.EventWithSettings, len(events)) for i, event := range events { result[i] = domain.EventWithSettings{ ID: event.ID, SportID: event.SportID, MatchName: event.MatchName, HomeTeam: event.HomeTeam, AwayTeam: event.AwayTeam, HomeTeamID: event.HomeTeamID, AwayTeamID: event.AwayTeamID, HomeTeamImage: event.HomeKitImage, AwayTeamImage: event.AwayKitImage, LeagueID: event.LeagueID, LeagueName: event.LeagueName, LeagueCC: domain.ValidString{ Value: event.LeagueCc.String, Valid: event.LeagueCc.Valid, }, StartTime: event.StartTime.Time.UTC(), Source: domain.EventSource(event.Source), Status: domain.EventStatus(event.Status), TotalOddOutcomes: event.TotalOutcomes, SourceEventID: event.SourceEventID, WinningUpperLimit: event.WinningUpperLimit, IsFeatured: event.IsFeatured, IsMonitored: event.IsMonitored, IsActive: event.IsActive, DefaultIsFeatured: event.DefaultIsFeatured, DefaultIsActive: event.DefaultIsActive, DefaultWinningUpperLimit: event.DefaultWinningUpperLimit, Score: domain.ValidString{ Value: event.Score.String, Valid: event.Score.Valid, }, MatchMinute: domain.ValidInt{ Value: int(event.MatchMinute.Int32), Valid: event.MatchMinute.Valid, }, TimerStatus: domain.ValidString{ Value: event.TimerStatus.String, Valid: event.TimerStatus.Valid, }, AddedTime: domain.ValidInt{ Value: int(event.AddedTime.Int32), Valid: event.AddedTime.Valid, }, MatchPeriod: domain.ValidInt{ Value: int(event.MatchPeriod.Int32), Valid: event.MatchPeriod.Valid, }, IsLive: event.IsLive, UpdatedAt: event.UpdatedAt.Time, FetchedAt: event.FetchedAt.Time, } } return result, totalCount, nil } func (s *Store) GetEventWithSettingByID(ctx context.Context, ID int64, companyID int64) (domain.EventWithSettings, error) { event, err := s.queries.GetEventWithSettingByID(ctx, dbgen.GetEventWithSettingByIDParams{ ID: ID, CompanyID: companyID, }) if err != nil { return domain.EventWithSettings{}, err } res := domain.EventWithSettings{ ID: event.ID, SportID: event.SportID, MatchName: event.MatchName, HomeTeam: event.HomeTeam, AwayTeam: event.AwayTeam, HomeTeamID: event.HomeTeamID, AwayTeamID: event.AwayTeamID, HomeTeamImage: event.HomeKitImage, AwayTeamImage: event.AwayKitImage, LeagueID: event.LeagueID, LeagueName: event.LeagueName, LeagueCC: domain.ValidString{ Value: event.LeagueCc.String, Valid: event.LeagueCc.Valid, }, StartTime: event.StartTime.Time.UTC(), Source: domain.EventSource(event.Source), Status: domain.EventStatus(event.Status), TotalOddOutcomes: event.TotalOutcomes, SourceEventID: event.SourceEventID, WinningUpperLimit: event.WinningUpperLimit, IsFeatured: event.IsFeatured, IsMonitored: event.IsMonitored, IsActive: event.IsActive, DefaultIsFeatured: event.DefaultIsFeatured, DefaultIsActive: event.DefaultIsActive, DefaultWinningUpperLimit: event.DefaultWinningUpperLimit, Score: domain.ValidString{ Value: event.Score.String, Valid: event.Score.Valid, }, MatchMinute: domain.ValidInt{ Value: int(event.MatchMinute.Int32), Valid: event.MatchMinute.Valid, }, TimerStatus: domain.ValidString{ Value: event.TimerStatus.String, Valid: event.TimerStatus.Valid, }, AddedTime: domain.ValidInt{ Value: int(event.AddedTime.Int32), Valid: event.AddedTime.Valid, }, MatchPeriod: domain.ValidInt{ Value: int(event.MatchPeriod.Int32), Valid: event.MatchPeriod.Valid, }, IsLive: event.IsLive, UpdatedAt: event.UpdatedAt.Time, FetchedAt: event.FetchedAt.Time, } return res, nil } func (s *Store) UpdateTenantEventSettings(ctx context.Context, event domain.UpdateTenantEventSettings) error { return s.queries.SaveTenantEventSettings(ctx, domain.ConvertUpdateTenantEventSettings(event)) } func (s *Store) UpdateGlobalEventSettings(ctx context.Context, event domain.UpdateGlobalEventSettings) error { return s.queries.UpdateGlobalEventSettings(ctx, domain.ConvertUpdateGlobalEventSettings(event)) }