topfans/backend/services/assetService/repository/season_repository.go
2026-06-11 16:35:56 +08:00

68 lines
1.9 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
// end_time 是 bigint 毫秒时间戳,需用 EXTRACT(EPOCH FROM NOW()) * 1000 转为毫秒
err := r.db.Where("status = ? AND end_time < ?", "active", gorm.Expr("EXTRACT(EPOCH FROM NOW()) * 1000")).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
}