Deploy / deploy (push) Canceled after 0s
- 阶梯外层为了窄屏横向滚动设了 overflow-x,纵向也跟着被裁,画在图标外的金圈上沿没了 - 0026 只改了奖章条件没按新条件补发:玩家国度每题 5 / 10 分,题数够了、总分不够的人 没拿到「成分复杂」,页面还显示「再做对 1 道」。0029 按现在的条件只补不收(按 9-29 备份 只有 1 人;其余两枚换算前后等价,也没有人会因新条件被收回)。排在删列 0028 之后, 因为 0028 可能已经在线上执行过 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
21 lines
1.2 KiB
SQL
21 lines
1.2 KiB
SQL
-- 排在删列(0028)之后、而不是之前:0028 可能已经在线上执行过,created_at 比它小的迁移
|
|
-- 会被执行器当成「已经跑过」永远跳过。这条只碰进度和奖章表,和删列互不影响。
|
|
--
|
|
-- 0026 把「总分达到 N」的奖章换成了「做对 N 道」,但只改了条件、没按新条件补发:
|
|
-- 每题不到 10 分的题单里,做对的题数早就够了、原来的总分却不够的人没拿到(快照里玩家国度
|
|
-- 做对 7 道的人没有「成分复杂」),页面上还显示「再做对 1 道」。这里按现在的条件只补不收:
|
|
-- 拿到过的不收回(把学生已经拿到的奖章收走不合适),漏发的补上。
|
|
INSERT INTO "user_badge" ("user_id", "badge_id", "earned_time")
|
|
SELECT g."user_id", b."id", now()
|
|
FROM "problemset_progress" g
|
|
JOIN "problemset_badge" b ON b."problemset_id" = g."problemset_id"
|
|
WHERE (
|
|
b."condition_type" = 'problem_count'
|
|
AND (SELECT count(*) FROM jsonb_object_keys(g."progress_detail")) >= b."condition_value"
|
|
) OR (
|
|
b."condition_type" = 'all_problems'
|
|
AND g."total_problems_count" > 0
|
|
AND g."completed_problems_count" = g."total_problems_count"
|
|
)
|
|
ON CONFLICT ("badge_id", "user_id") DO NOTHING;
|