diff --git a/backend/src/main/java/com/danyang/match/platform/shared/config/FeatureFlagConfig.java b/backend/src/main/java/com/danyang/match/platform/shared/config/FeatureFlagConfig.java
index e050dab..e0897eb 100644
--- a/backend/src/main/java/com/danyang/match/platform/shared/config/FeatureFlagConfig.java
+++ b/backend/src/main/java/com/danyang/match/platform/shared/config/FeatureFlagConfig.java
@@ -18,16 +18,12 @@ public class FeatureFlagConfig {
private boolean appealEnabled = false;
// ---- V1.1 新增 Flag ----
- /** 公益婚恋咨询功能开关 */
- private boolean counselingEnabled = true;
- /** 婚前辅导功能开关(复用 counseling,默认跟随 counselingEnabled) */
- private boolean premaritalEnabled = true;
- /** 内容管理(婚恋课堂/反诈文章)开关 */
- private boolean contentEnabled = true;
- /** 善缘服务站功能开关 */
- private boolean serviceLocationEnabled = true;
- /** 本地资格核验功能开关 */
- private boolean localEligibilityEnabled = true;
+ // ⚠️ 2026-09-19 移除:counselingEnabled / premaritalEnabled / contentEnabled /
+ // serviceLocationEnabled / localEligibilityEnabled 五个开关**从未被任何业务代码读取**
+ // (全仓搜索仅命中本类的定义与 getAllFlags,外加 FeatureFlagControllerTest 一处断言)。
+ // 留着是「配置暴露但未强制」的假开关 —— 运维以为关掉能停功能,实际无效。
+ // 若将来真需要按开关控制这些模块,应重新加入并**同时写入业务调用点**。
+ //
/** 红娘服务转介功能开关 */
private boolean referralEnabled = true;
/** 活动互选二阶段同意开关 */
@@ -51,12 +47,8 @@ public class FeatureFlagConfig {
/** 佐证材料保留天数;实际清理由运维任务按此配置执行 */
private int localEvidenceRetentionDays = 365;
- // ---- V1.1 咨询附件私存储 ----
- /** 咨询附件是否使用私有存储桶 */
- private boolean counselingAttachmentsPrivate = true;
- /** 咨询附件存储桶名称 */
- private String counselingAttachmentsBucket = "counseling-attachments";
-
+ // ⚠️ 2026-09-19 移除:counselingAttachmentsPrivate / counselingAttachmentsBucket 从未被读取 ——
+ // 咨询附件的存储实走 object-storage.bucket-private,这两项与真实链路无关。
// ==================== Getters & Setters ====================
public boolean isActivityEnabled() { return activityEnabled; }
@@ -71,21 +63,6 @@ public class FeatureFlagConfig {
public boolean isAppealEnabled() { return appealEnabled; }
public void setAppealEnabled(boolean appealEnabled) { this.appealEnabled = appealEnabled; }
- public boolean isCounselingEnabled() { return counselingEnabled; }
- public void setCounselingEnabled(boolean counselingEnabled) { this.counselingEnabled = counselingEnabled; }
-
- public boolean isPremaritalEnabled() { return premaritalEnabled; }
- public void setPremaritalEnabled(boolean premaritalEnabled) { this.premaritalEnabled = premaritalEnabled; }
-
- public boolean isContentEnabled() { return contentEnabled; }
- public void setContentEnabled(boolean contentEnabled) { this.contentEnabled = contentEnabled; }
-
- public boolean isServiceLocationEnabled() { return serviceLocationEnabled; }
- public void setServiceLocationEnabled(boolean serviceLocationEnabled) { this.serviceLocationEnabled = serviceLocationEnabled; }
-
- public boolean isLocalEligibilityEnabled() { return localEligibilityEnabled; }
- public void setLocalEligibilityEnabled(boolean localEligibilityEnabled) { this.localEligibilityEnabled = localEligibilityEnabled; }
-
public boolean isReferralEnabled() { return referralEnabled; }
public void setReferralEnabled(boolean referralEnabled) { this.referralEnabled = referralEnabled; }
@@ -116,12 +93,6 @@ public class FeatureFlagConfig {
public int getLocalEvidenceRetentionDays() { return localEvidenceRetentionDays; }
public void setLocalEvidenceRetentionDays(int localEvidenceRetentionDays) { this.localEvidenceRetentionDays = localEvidenceRetentionDays; }
- public boolean isCounselingAttachmentsPrivate() { return counselingAttachmentsPrivate; }
- public void setCounselingAttachmentsPrivate(boolean counselingAttachmentsPrivate) { this.counselingAttachmentsPrivate = counselingAttachmentsPrivate; }
-
- public String getCounselingAttachmentsBucket() { return counselingAttachmentsBucket; }
- public void setCounselingAttachmentsBucket(String counselingAttachmentsBucket) { this.counselingAttachmentsBucket = counselingAttachmentsBucket; }
-
/**
* 获取所有 Feature Flag 的当前值(供 /operator/feature-flags 接口使用)
*/
@@ -131,11 +102,6 @@ public class FeatureFlagConfig {
flags.put("matchmakerEnabled", matchmakerEnabled);
flags.put("chatImageEnabled", chatImageEnabled);
flags.put("appealEnabled", appealEnabled);
- flags.put("counselingEnabled", counselingEnabled);
- flags.put("premaritalEnabled", premaritalEnabled);
- flags.put("contentEnabled", contentEnabled);
- flags.put("serviceLocationEnabled", serviceLocationEnabled);
- flags.put("localEligibilityEnabled", localEligibilityEnabled);
flags.put("referralEnabled", referralEnabled);
flags.put("mutualConsentEnabled", mutualConsentEnabled);
flags.put("serviceProgramEnabled", serviceProgramEnabled);
@@ -146,8 +112,6 @@ public class FeatureFlagConfig {
flags.put("localEvidenceMaxFileSizeMB", localEvidenceMaxFileSizeMB);
flags.put("localEvidenceAllowedTypes", localEvidenceAllowedTypes);
flags.put("localEvidenceRetentionDays", localEvidenceRetentionDays);
- flags.put("counselingAttachmentsPrivate", counselingAttachmentsPrivate);
- flags.put("counselingAttachmentsBucket", counselingAttachmentsBucket);
return flags;
}
}
diff --git a/backend/src/main/resources/application-docker.yml b/backend/src/main/resources/application-docker.yml
index 4da8ca3..9c0db32 100644
--- a/backend/src/main/resources/application-docker.yml
+++ b/backend/src/main/resources/application-docker.yml
@@ -64,11 +64,6 @@ features:
chat-image-enabled: false
appeal-enabled: false
# V1.1
- counseling-enabled: true
- premarital-enabled: true
- content-enabled: true
- service-location-enabled: true
- local-eligibility-enabled: true
referral-enabled: true
mutual-consent-enabled: true
service-program-enabled: true
@@ -79,5 +74,3 @@ features:
local-evidence-max-file-size-mb: 10
local-evidence-allowed-types: ${LOCAL_EVIDENCE_ALLOWED_TYPES:jpg,png}
local-evidence-retention-days: ${LOCAL_EVIDENCE_RETENTION_DAYS:365}
- counseling-attachments-private: true
- counseling-attachments-bucket: counseling-attachments
diff --git a/backend/src/test/java/com/danyang/match/platform/shared/controller/FeatureFlagControllerTest.java b/backend/src/test/java/com/danyang/match/platform/shared/controller/FeatureFlagControllerTest.java
index 6e1bdce..a6998e3 100644
--- a/backend/src/test/java/com/danyang/match/platform/shared/controller/FeatureFlagControllerTest.java
+++ b/backend/src/test/java/com/danyang/match/platform/shared/controller/FeatureFlagControllerTest.java
@@ -23,8 +23,10 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
*
背景(KEEP-VERIFY 复验发现):
*
* - D-22-A(High):原 {@code updateFlag} 仅支持布尔 flag(反射 {@code getMethod("set"+cap, boolean.class)}),
- * 7 个非布尔 flag(livenessProvider / localEvidenceAllowedTypes / counselingAttachmentsBucket /
- * localEvidenceMaxFiles / localEvidenceMaxFileSizeMB / localEvidenceRetentionDays)经 API 更新必失败。
+ * 非布尔 flag(livenessProvider / localEvidenceAllowedTypes / localEvidenceMaxFiles /
+ * localEvidenceMaxFileSizeMB / localEvidenceRetentionDays)经 API 更新必失败。
+ * (原文记 7 个,其中 counselingAttachmentsBucket / counselingAttachmentsPrivate
+ * 已于 2026-09-19 作为**从未被读取的死配置**移除,故现为 5 个。)
* - D-22-B(Medium):原 {@code body.getOrDefault("value", false)} 缺 value 时静默置 false(可能误关功能),
* 且非布尔类型转型会崩。
*
@@ -56,15 +58,17 @@ class FeatureFlagControllerTest {
ApiResponse