正式关闭 ECR-001/002;删除 fortune 双写与 lucky 字段,H5 改读 outlook/boost。 Co-authored-by: Cursor <cursoragent@cursor.com>
2.5 KiB
2.5 KiB
Go 服务边界(冻结)
单二进制 apps/api;按包拆分,禁止跨层:Handler → Service → Repository。
详见 ../architecture.md。
Packages under internal/service/
| Package | 职责 | P1 | 实现态(2026-08) |
|---|---|---|---|
user |
注册/游客升级/Session | Yes | 多在 profile/auth 路径;无独立包名时勿重复造轮 |
profile |
个人档案 CRUD、切换 | Yes | service/profile |
portrait |
生成个人画像 → GrowthReport | Yes | 计算在 internal/portrait;用例经 report/handler 路径 |
scale |
探索测试定义与计分 | Yes | service/scale + internal/scale |
relation |
RelationInsight | Yes 必做 | service/relation + internal/relation |
report |
GrowthReport 读取 + 权益裁剪 | Yes | service/report |
ask |
Thread/Message;P1 规则引擎 + 额度 | Yes(Demo) | service/ask + internal/ask |
companion |
SolarTerm 读、Mood 写 | Shell | service/companion |
membership |
成长会员状态与额度 | Yes | service/membership(ECR-001 Phase C 已从 report 抽出) |
order |
Order + pay-mock + DeepAccess 发放 | Yes | 用例在 service/membership(同 Phase C;未单独拆包) |
imagecard |
意象卡片 | P2 | service/imagecard |
Engine vs Service
| Kind | Path | Can | Cannot |
|---|---|---|---|
| Engine | internal/{portrait,relation,star,ask,scale,rhythm,…} |
纯计算 / 组装报告结构 | 引用 gin.Context;做权益解锁 |
| Service | internal/service/* |
用例编排、鉴权后业务、调 repo/engine | SQL 直写;跳过归属校验 |
internal/handler/:每域一组 handler,只做 bind/validate/调用 service。
internal/repository/:SQL;无 business unlock 规则(规则在 service/report + membership)。
星座周期展望引擎包:internal/star/outlook(原 fortune,ECR-002)。对外 JSON 仅 outlook / outlook_detail;周期提示字段为 boost(ECR-003 已移除 fortune/lucky 兼容键)。
跨域规则
- 权益判定只在
report/ask/membershipservice,不在 handler、不在 H5。 portrait与relation写growth_reports;读一律走report.Get(带裁剪)。ask强制校验profile归属当前 user。
禁止
- 新建
decode/match/unlock/fortune包名 - Handler 直连 DB
- 在 JSON 字段名使用
luck/fortune/ji_xiong