feat(achievement): 添加早起提交次数指标

5:00–7:00 的提交计数,与 midnight_submissions 对称,5 点为分界不重叠。
纯计数指标,不依赖 _ 前缀辅助键,因此无需 recompute_state。

部署后需跑 recompute_achievements,否则存量用户该指标为空。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-05 10:58:30 -06:00
parent e1ed78e7d9
commit c50f7b7269

View File

@@ -252,6 +252,18 @@ class MidnightSubmissions(BaseMetric):
return sum(1 for t in _practice_submissions(user.id).values_list("create_time", flat=True) if 0 <= timezone.localtime(t).hour < 5)
@metric("early_bird_submissions", "早起提交次数", "5:007:00 之间的提交次数")
class EarlyBirdSubmissions(BaseMetric):
"""与 midnight_submissions 对称的作息维度。5 点是两者的分界,不重叠。"""
def on_submission(self, metrics, sub, ctx):
if 5 <= ctx["local_hour"] < 7:
metrics["early_bird_submissions"] = metrics.get("early_bird_submissions", 0) + 1
def recompute(self, user):
return sum(1 for t in _practice_submissions(user.id).values_list("create_time", flat=True) if 5 <= timezone.localtime(t).hour < 7)
@metric("compile_error_count", "编译错误次数", "累计编译错误的次数")
class CompileErrorCount(BaseMetric):
def on_submission(self, metrics, sub, ctx):