From 562cf4f0b47f89f33c2c643bf2a1b242ea7ca6b5 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Tue, 4 Aug 2026 01:14:07 -0600 Subject: [PATCH] =?UTF-8?q?fix(plan):=20=E9=9A=90=E8=97=8F=E6=88=90?= =?UTF-8?q?=E5=B0=B1=E7=9A=84=E6=9D=A1=E4=BB=B6=E5=AD=97=E6=AE=B5=E4=B9=9F?= =?UTF-8?q?=E5=BF=85=E9=A1=BB=E9=81=AE=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 只遮名称和描述、却明文下发 metric/operator/threshold, 学生打开 DevTools 就能看到达成条件,隐藏成就失去意义。 Co-Authored-By: Claude Opus 5 --- .../plans/2026-08-03-achievement-system.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/superpowers/plans/2026-08-03-achievement-system.md b/docs/superpowers/plans/2026-08-03-achievement-system.md index 092c506..21d069f 100644 --- a/docs/superpowers/plans/2026-08-03-achievement-system.md +++ b/docs/superpowers/plans/2026-08-03-achievement-system.md @@ -1016,6 +1016,12 @@ class AchievementSerializer(serializers.ModelSerializer): name = serializers.SerializerMethodField() description = serializers.SerializerMethodField() icon = serializers.SerializerMethodField() + # 条件三件套也必须跟着遮掉:只遮名称和描述、却明文下发 + # metric/operator/threshold,学生打开 DevTools 就知道"凌晨提交 10 次", + # 隐藏成就的意义全部作废 + metric = serializers.SerializerMethodField() + operator = serializers.SerializerMethodField() + threshold = serializers.SerializerMethodField() class Meta: model = Achievement @@ -1037,6 +1043,15 @@ class AchievementSerializer(serializers.ModelSerializer): def get_icon(self, obj): return "❓" if self._masked(obj) else obj.icon + def get_metric(self, obj): + return None if self._masked(obj) else obj.metric + + def get_operator(self, obj): + return None if self._masked(obj) else obj.operator + + def get_threshold(self, obj): + return None if self._masked(obj) else obj.threshold + def get_unlock_rate(self, obj): total = get_active_user_count() if not total: