package repository import ( "errors" "github.com/topfans/backend/pkg/database" "github.com/topfans/backend/pkg/models" "gorm.io/gorm" ) // MintingActivityRepository MintingActivity仓库接口 type MintingActivityRepository interface { // GetActiveMintingActivities 获取活跃的铸造活动列表 GetActiveMintingActivities(starID int64, page, pageSize int) ([]*models.MintingActivity, int64, error) // GetMintingActivityByID 根据ID获取铸造活动 GetMintingActivityByID(id int64) (*models.MintingActivity, error) } // mintingActivityRepository MintingActivity仓库实现 type mintingActivityRepository struct { db *gorm.DB } // NewMintingActivityRepository 创建MintingActivity仓库实例 func NewMintingActivityRepository() MintingActivityRepository { return &mintingActivityRepository{ db: database.GetDB(), } } // GetActiveMintingActivities 获取活跃的铸造活动列表 func (r *mintingActivityRepository) GetActiveMintingActivities(starID int64, page, pageSize int) ([]*models.MintingActivity, int64, error) { if page <= 0 { page = 1 } if pageSize <= 0 { pageSize = 10 } query := r.db.Model(&models.MintingActivity{}).Where("is_active = ?", true) if starID > 0 { query = query.Where("star_id = ?", starID) } var total int64 if err := query.Count(&total).Error; err != nil { return nil, 0, err } offset := (page - 1) * pageSize var activities []*models.MintingActivity if err := query. Order("created_at DESC"). Offset(offset). Limit(pageSize). Find(&activities).Error; err != nil { return nil, 0, err } return activities, total, nil } // GetMintingActivityByID 根据ID获取铸造活动 func (r *mintingActivityRepository) GetMintingActivityByID(id int64) (*models.MintingActivity, error) { if id <= 0 { return nil, errors.New("id must be greater than 0") } var activity models.MintingActivity if err := r.db.First(&activity, id).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, nil } return nil, err } return &activity, nil }