80 lines
2.0 KiB
Go
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
|
|
} |