fix: 修复微信通知字段截断导致的编码错误 feat: 添加有效邀请相关字段和任务中心常量 refactor: 重构一番赏奖品格位逻辑 perf: 优化道具卡列表聚合显示 docs: 更新项目说明文档和API文档 test: 添加字符串截断工具测试
90 lines
3.4 KiB
Go
90 lines
3.4 KiB
Go
package task_center
|
|
|
|
import (
|
|
"time"
|
|
|
|
"gorm.io/datatypes"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type Task struct {
|
|
ID int64 `gorm:"primaryKey;autoIncrement"`
|
|
Name string `gorm:"size:64;not null"`
|
|
Description string `gorm:"type:text"`
|
|
Status int32 `gorm:"not null;index"` // 增加索引,常用于过滤活跃任务
|
|
StartTime *time.Time `gorm:"index"`
|
|
EndTime *time.Time `gorm:"index"`
|
|
Visibility int32 `gorm:"not null"`
|
|
ConditionsSchema datatypes.JSON `gorm:"type:json"`
|
|
Tiers []TaskTier `gorm:"foreignKey:TaskID"`
|
|
Rewards []TaskReward `gorm:"foreignKey:TaskID"`
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
func (Task) TableName() string { return "task_center_tasks" }
|
|
|
|
type TaskTier struct {
|
|
ID int64 `gorm:"primaryKey;autoIncrement"`
|
|
TaskID int64 `gorm:"index;not null"`
|
|
Metric string `gorm:"size:32;not null"`
|
|
Operator string `gorm:"size:8;not null"`
|
|
Threshold int64 `gorm:"not null"`
|
|
Window string `gorm:"size:32;not null"`
|
|
Repeatable int32 `gorm:"not null"`
|
|
Priority int32 `gorm:"not null"`
|
|
ExtraParams datatypes.JSON `gorm:"type:json"`
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
func (TaskTier) TableName() string { return "task_center_task_tiers" }
|
|
|
|
type TaskReward struct {
|
|
ID int64 `gorm:"primaryKey;autoIncrement"`
|
|
TaskID int64 `gorm:"index;not null"`
|
|
TierID int64 `gorm:"index;not null"`
|
|
RewardType string `gorm:"size:32;not null"`
|
|
RewardPayload datatypes.JSON `gorm:"type:json"`
|
|
Quantity int64 `gorm:"not null"`
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
func (TaskReward) TableName() string { return "task_center_task_rewards" }
|
|
|
|
type UserTaskProgress struct {
|
|
ID int64 `gorm:"primaryKey;autoIncrement"`
|
|
UserID int64 `gorm:"uniqueIndex:uk_user_task;not null"` // 联合唯一索引,防止并发重复创建
|
|
TaskID int64 `gorm:"uniqueIndex:uk_user_task;not null"` // 联合唯一索引
|
|
OrderCount int64 `gorm:"not null"`
|
|
InviteCount int64 `gorm:"not null"`
|
|
EffectiveInviteCount int64 `gorm:"not null;default:0"`
|
|
FirstOrder int32 `gorm:"not null"`
|
|
ClaimedTiers datatypes.JSON `gorm:"type:json"`
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
func (UserTaskProgress) TableName() string { return "task_center_user_progress" }
|
|
|
|
type TaskEventLog struct {
|
|
ID int64 `gorm:"primaryKey;autoIncrement"`
|
|
EventID string `gorm:"size:64;index"`
|
|
SourceType string `gorm:"size:16"`
|
|
SourceID int64 `gorm:"index"`
|
|
UserID int64 `gorm:"index"`
|
|
TaskID int64 `gorm:"index"`
|
|
TierID int64 `gorm:"index"`
|
|
IdempotencyKey string `gorm:"size:128;uniqueIndex"`
|
|
Status string `gorm:"size:16"`
|
|
Result datatypes.JSON `gorm:"type:json"`
|
|
CreatedAt time.Time
|
|
}
|
|
|
|
func (TaskEventLog) TableName() string { return "task_center_event_logs" }
|
|
|
|
func AutoMigrate(db *gorm.DB) error {
|
|
return db.AutoMigrate(&Task{}, &TaskTier{}, &TaskReward{}, &UserTaskProgress{}, &TaskEventLog{})
|
|
}
|