feat(challenges): 新增每日进度上报防重复机制
- 创建 t_challenge_progress_reports 表记录用户每日上报 - 通过唯一索引 (challenge_id, user_id, report_date) 确保每日仅一次有效上报 - 更新 progress 时先写入报告表,冲突则直接返回当前进度 - 模块中新增 ChallengeProgressReport 模型及相关依赖
This commit is contained in:
@@ -40,3 +40,17 @@ CREATE TABLE IF NOT EXISTS t_challenge_participants (
|
||||
|
||||
CREATE INDEX idx_challenge_participants_status_progress
|
||||
ON t_challenge_participants (challenge_id, status, progress_value DESC, updated_at ASC);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS t_challenge_progress_reports (
|
||||
id CHAR(36) NOT NULL PRIMARY KEY,
|
||||
challenge_id CHAR(36) NOT NULL COMMENT '挑战 ID',
|
||||
user_id VARCHAR(64) NOT NULL COMMENT '用户 ID',
|
||||
report_date DATE NOT NULL COMMENT '自然日,确保每日仅上报一次',
|
||||
increment_value INT NOT NULL DEFAULT 1 COMMENT '本次上报的进度增量',
|
||||
reported_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上报时间戳',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_challenge_progress_reports_challenge FOREIGN KEY (challenge_id) REFERENCES t_challenges (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT fk_challenge_progress_reports_user FOREIGN KEY (user_id) REFERENCES t_users (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT uq_challenge_progress_reports_day UNIQUE KEY (challenge_id, user_id, report_date)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
Reference in New Issue
Block a user