67 lines
1.8 KiB
Go
67 lines
1.8 KiB
Go
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
|
|
} |