topfans/backend/services/activityService/repository/minting_activity_repository.go
2026-05-12 10:42:00 +08:00

80 lines
2.0 KiB
Go

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
}