diff --git a/backend/services/assetService/repository/asset_level_repository.go b/backend/services/assetService/repository/asset_level_repository.go new file mode 100644 index 0000000..69ffa7e --- /dev/null +++ b/backend/services/assetService/repository/asset_level_repository.go @@ -0,0 +1,66 @@ +package repository + +import ( + "github.com/topfans/backend/pkg/models" + "gorm.io/gorm" +) + +type AssetLevelRepository struct { + db *gorm.DB +} + +func NewAssetLevelRepository(db *gorm.DB) *AssetLevelRepository { + return &AssetLevelRepository{db: db} +} + +func (r *AssetLevelRepository) Create(record *models.AssetLevelRecord) error { + return r.db.Create(record).Error +} + +func (r *AssetLevelRepository) Save(record *models.AssetLevelRecord) error { + return r.db.Save(record).Error +} + +func (r *AssetLevelRepository) GetByAssetID(assetID int64) (*models.AssetLevelRecord, error) { + var record models.AssetLevelRecord + err := r.db.Where("asset_id = ?", assetID).First(&record).Error + if err != nil { + return nil, err + } + return &record, nil +} + +func (r *AssetLevelRepository) GetBySeason(seasonID string) ([]*models.AssetLevelRecord, error) { + var records []*models.AssetLevelRecord + err := r.db.Where("season_id = ?", seasonID).Find(&records).Error + return records, err +} + +func (r *AssetLevelRepository) GetAllLevels() ([]*models.AssetLevel, error) { + var levels []*models.AssetLevel + err := r.db.Order("level_order ASC").Find(&levels).Error + return levels, err +} + +func (r *AssetLevelRepository) GetLevelConfig(level string) (*models.AssetLevel, error) { + var config models.AssetLevel + err := r.db.Where("level = ?", level).First(&config).Error + if err != nil { + return nil, err + } + return &config, nil +} + +func (r *AssetLevelRepository) CreateChangeLog(log *models.AssetLevelChangeLog) error { + return r.db.Create(log).Error +} + +func (r *AssetLevelRepository) GetChangeLogs(assetID int64, limit, offset int) ([]*models.AssetLevelChangeLog, error) { + var logs []*models.AssetLevelChangeLog + err := r.db.Where("asset_id = ?", assetID). + Order("created_at DESC"). + Limit(limit). + Offset(offset). + Find(&logs).Error + return logs, err +} \ No newline at end of file diff --git a/backend/services/assetService/repository/season_decay_config_repository.go b/backend/services/assetService/repository/season_decay_config_repository.go new file mode 100644 index 0000000..c7e3167 --- /dev/null +++ b/backend/services/assetService/repository/season_decay_config_repository.go @@ -0,0 +1,29 @@ +package repository + +import ( + "github.com/topfans/backend/pkg/models" + "gorm.io/gorm" +) + +type SeasonDecayConfigRepository struct { + db *gorm.DB +} + +func NewSeasonDecayConfigRepository(db *gorm.DB) *SeasonDecayConfigRepository { + return &SeasonDecayConfigRepository{db: db} +} + +func (r *SeasonDecayConfigRepository) GetBySeason(seasonID string) ([]*models.SeasonDecayConfig, error) { + var configs []*models.SeasonDecayConfig + err := r.db.Where("season_id = ?", seasonID).Find(&configs).Error + return configs, err +} + +func (r *SeasonDecayConfigRepository) GetBySeasonAndLevel(seasonID, level string) (*models.SeasonDecayConfig, error) { + var config models.SeasonDecayConfig + err := r.db.Where("season_id = ? AND level = ?", seasonID, level).First(&config).Error + if err != nil { + return nil, err + } + return &config, nil +} \ No newline at end of file diff --git a/backend/services/assetService/repository/season_repository.go b/backend/services/assetService/repository/season_repository.go new file mode 100644 index 0000000..56fb601 --- /dev/null +++ b/backend/services/assetService/repository/season_repository.go @@ -0,0 +1,67 @@ +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 +} \ No newline at end of file