package repository import ( "github.com/topfans/backend/pkg/models" "gorm.io/gorm" ) type SeasonRepository struct { db *gorm.DB } func NewSeasonRepository(db *gorm.DB) *SeasonRepository { return &SeasonRepository{db: db} } func (r *SeasonRepository) GetByID(seasonID string) (*models.Season, error) { var season models.Season err := r.db.Where("id = ?", seasonID).First(&season).Error if err != nil { return nil, err } return &season, nil } func (r *SeasonRepository) GetActiveSeason() (*models.Season, error) { var season models.Season err := r.db.Where("status = ?", "active").First(&season).Error if err != nil { return nil, err } return &season, nil } func (r *SeasonRepository) GetEndedSeasons() ([]*models.Season, error) { var seasons []*models.Season err := r.db.Where("status = ? AND end_time < ?", "active", gorm.Expr("NOW()")).Find(&seasons).Error return seasons, err } func (r *SeasonRepository) Save(season *models.Season) error { return r.db.Save(season).Error } func (r *SeasonRepository) Create(season *models.Season) error { return r.db.Create(season).Error } func (r *SeasonRepository) GetOrCreate(seasonID string, durationDays int, resetStrategy string) (*models.Season, error) { season, err := r.GetByID(seasonID) if err == nil { return season, nil } if err == gorm.ErrRecordNotFound { season = &models.Season{ ID: seasonID, DurationDays: durationDays, ResetStrategy: resetStrategy, ResetLevel: true, Status: "active", } if err := r.Create(season); err != nil { return nil, err } return season, nil } return nil, err }