package model // TaskDefinition 任务定义表 type TaskDefinition struct { ID int64 `gorm:"primaryKey;column:id;autoIncrement"` StarID *int64 `gorm:"column:star_id;index"` // NULL=全局默认 TaskKey string `gorm:"column:task_key;size:50;not null"` TaskType string `gorm:"column:task_type;size:20;not null"` // daily/onboarding Name string `gorm:"column:name;size:100;not null"` Description string `gorm:"column:description;type:text"` CrystalReward int64 `gorm:"column:crystal_reward;default:0"` ExpReward int64 `gorm:"column:exp_reward;default:0"` SortOrder int `gorm:"column:sort_order;default:0"` IsActive bool `gorm:"column:is_active;default:true"` CreatedAt int64 `gorm:"column:created_at"` UpdatedAt int64 `gorm:"column:updated_at"` } func (TaskDefinition) TableName() string { return "task_definitions" } // UserDailyTaskProgress 每日任务进度表 type UserDailyTaskProgress struct { ID int64 `gorm:"primaryKey;column:id;autoIncrement"` UserID int64 `gorm:"column:user_id;not null;index:idx_daily_user_star_key"` StarID int64 `gorm:"column:star_id;not null;index:idx_daily_user_star_key"` TaskKey string `gorm:"column:task_key;size:50;not null;index:idx_daily_user_star_key"` Status string `gorm:"column:status;size:20;default:pending"` // pending/completed/claimed CompletedAt *int64 `gorm:"column:completed_at"` ClaimedAt *int64 `gorm:"column:claimed_at"` CreatedAt int64 `gorm:"column:created_at"` UpdatedAt int64 `gorm:"column:updated_at"` } func (UserDailyTaskProgress) TableName() string { return "user_daily_task_progress" } // UserOnboardingProgress 引导任务进度表 type UserOnboardingProgress struct { ID int64 `gorm:"primaryKey;column:id;autoIncrement"` UserID int64 `gorm:"column:user_id;not null;index:idx_onboard_user_key"` TaskKey string `gorm:"column:task_key;size:50;not null;index:idx_onboard_user_key"` Status string `gorm:"column:status;size:20;default:pending"` CompletedAt *int64 `gorm:"column:completed_at"` ClaimedAt *int64 `gorm:"column:claimed_at"` CreatedAt int64 `gorm:"column:created_at"` UpdatedAt int64 `gorm:"column:updated_at"` } func (UserOnboardingProgress) TableName() string { return "user_onboarding_progress" } // UserOnboardingStatus 引导流程状态表(per-user per-star) type UserOnboardingStatus struct { ID int64 `gorm:"primaryKey;column:id;autoIncrement"` UserID int64 `gorm:"column:user_id;not null;uniqueIndex:uk_user_star_onboarding"` StarID int64 `gorm:"column:star_id;not null;uniqueIndex:uk_user_star_onboarding"` IsOnboardingCompleted bool `gorm:"column:is_onboarding_completed;default:false"` IsOnboardingClaimed bool `gorm:"column:is_onboarding_claimed;default:false"` HasFriendDisplayBonus bool `gorm:"column:has_friend_display_bonus;default:false"` OnboardingCompletedAt *int64 `gorm:"column:onboarding_completed_at"` OnboardingClaimedAt *int64 `gorm:"column:onboarding_claimed_at"` ClaimedStages []int64 `gorm:"column:claimed_stages;type:text;serializer:json"` // 已领取奖励的阶段列表 CreatedAt int64 `gorm:"column:created_at"` UpdatedAt int64 `gorm:"column:updated_at"` CurrentStage int64 `gorm:"column:current_stage;default:0"` Status string `gorm:"column:status;size:20;default:pending"` IsFirstLoginBonusClaimed bool `gorm:"column:is_first_login_bonus_claimed;default:false"` // 废弃字段 CompletedAt *int64 `gorm:"column:completed_at"` // 废弃字段 ClaimedAt *int64 `gorm:"column:claimed_at"` // 废弃字段 } func (UserOnboardingStatus) TableName() string { return "user_onboarding_status" } // OnboardingStageConfig 引导阶段配置表 type OnboardingStageConfig struct { ID int64 `gorm:"primaryKey;column:id;autoIncrement"` Stage int `gorm:"column:stage;not null;uniqueIndex"` Name string `gorm:"column:name;size:100;not null"` Description string `gorm:"column:description;type:text"` RequiredTaskKeys []string `gorm:"column:required_task_keys;type:text;serializer:json"` // 存储为 JSON 字符串 CrystalReward int64 `gorm:"column:crystal_reward;default:0"` ExpReward int64 `gorm:"column:exp_reward;default:0"` SortOrder int `gorm:"column:sort_order;default:0"` IsActive bool `gorm:"column:is_active;default:true"` CreatedAt int64 `gorm:"column:created_at"` UpdatedAt int64 `gorm:"column:updated_at"` } func (OnboardingStageConfig) TableName() string { return "onboarding_stage_config" } // ExhibitionRevenueRecord 展示收益记录表 type ExhibitionRevenueRecord struct { ID int64 `gorm:"primaryKey;column:id;autoIncrement"` UserID int64 `gorm:"column:user_id;not null;index:idx_revenue_user_star"` StarID int64 `gorm:"column:star_id;not null;index:idx_revenue_user_star"` ExhibitionID int64 `gorm:"column:exhibition_id;not null"` AssetID int64 `gorm:"column:asset_id;not null"` SlotID int64 `gorm:"column:slot_id;not null"` SlotOwnerUID int64 `gorm:"column:slot_owner_uid;not null"` SlotType string `gorm:"column:slot_type;size:20;not null"` // own/friend CrystalAmount int64 `gorm:"column:crystal_amount;not null"` CycleStartTime int64 `gorm:"column:cycle_start_time;not null"` CycleEndTime int64 `gorm:"column:cycle_end_time;not null"` Status string `gorm:"column:status;size:20;default:claimable"` // claimable/claimed/failed ClaimedAt *int64 `gorm:"column:claimed_at"` CreatedAt int64 `gorm:"column:created_at"` } func (ExhibitionRevenueRecord) TableName() string { return "exhibition_revenue_records" } // TaskResetLog 重置日志表 type TaskResetLog struct { ID int64 `gorm:"primaryKey;column:id;autoIncrement"` ResetType string `gorm:"column:reset_type;size:20;not null"` // daily LastResetAt int64 `gorm:"column:last_reset_at;not null"` CreatedAt int64 `gorm:"column:created_at"` } func (TaskResetLog) TableName() string { return "task_reset_log" }