92 lines
3.5 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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"`
ActivityID int64 `gorm:"not null;default:0;index"` // 关联活动ID0为全局
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_act;not null"` // 联合唯一索引
TaskID int64 `gorm:"uniqueIndex:uk_user_task_act;not null"`
ActivityID int64 `gorm:"uniqueIndex:uk_user_task_act;not null;default:0"`
OrderCount int64 `gorm:"not null"`
OrderAmount int64 `gorm:"not null;default:0"` // 累计消费金额(单位分)
InviteCount int64 `gorm:"not null"`
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{})
}