Files
patbond-doc/docs/architecture/backend-modules.md
T
lixi 5de9f397cb
CI / docs-build (push) Successful in 33s
docs(architecture): 新增后端模块结构与职责速览页
四模块(common/auth/user/pet)职责、端口、单迁移链纪律、
演进方向(微服务化/M5 FK 补回/media 域)一页速览,
挂「架构」导航首位,作为后端结构唯一权威入口。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-07 17:25:55 +08:00

69 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 后端模块结构与职责
> 本页是后端结构的**唯一权威速览**:模块怎么划分、各自负责什么、端口与依赖关系。
> 结构性变更(新增/拆分模块)须经 ADR 决策并同步更新本页。
> 最后更新:2026-09-07M2 第二波,T2-03 进行中)。
## 一图速览
```
patbond-apiMaven 多模块,Spring Boot 3.5 + JDK 17
├── patbond-common 公共库(无端口,被其余模块依赖)
├── patbond-auth 认证服务 :8081
├── patbond-user 用户服务 + 埋点 :8082 ← Flyway 迁移链唯一持有者
└── patbond-pet 宠物健康档案服务 :8083 ← M2 新增(ADR-009
```
部署形态:docker compose 四容器(postgres:18 + auth + user + pet),应用容器无状态(ADR-007)。
## 模块职责
### patbond-common(公共库)
- 统一错误信封与业务错误码体系(`code`/`message`/`data` 结构,稳定错误码契约)
- 共享异常类型与基础组件
- **不含业务逻辑、不起服务**;其余三个模块都依赖它
### patbond-auth(认证域,:8081
- 注册 / 登录 / 退出:`/api/v1/auth/**`
- JWT RS256 签发;access 15 分钟 / refresh 30 天轮换 / 多设备并行(ADR-003)
- 登录失败锁定(5 次错误 → 423 临时锁定)
- 首版仅账号 + 密码(ADR-004),凭证模型预留扩展
- 会话真值在数据库(auth_sessionstoken_family 轮换检测)
### patbond-user(用户域 + 平台能力,:8082)
- 用户资料:`/api/v1/me`
- **埋点接收**`/api/v1/events`(批量 ≤50、202 逐条结果、唯一允许匿名的写端点、eventId 幂等),落 `platform.product_events`
- **Flyway 迁移链唯一持有者**:全部数据库迁移(V1 身份/媒体基线、V2 埋点表、V3 宠物健康域、V4 字典种子……)集中在本模块 `src/main/resources/db/migration/` 统一执行,**其他模块不得携带 Flyway**——避免多模块并发迁移竞争,pet 域建表也在这里
### patbond-pet(宠物健康档案域,:8083M2 新增)
- 宠物 CRUD 与品种目录:`/api/v1/pets`、breeds
- 成员权限模型:pet_owners 三角色(owner / caregiver 可写,viewer 只读;ADR-015),创建宠物者自动成为 primary owner
- 健康记录:体重(weights)、疫苗(vaccinations + vaccine catalog,状态机)、健康事件(health-events,六类)、照护提醒(care-reminders,四类,仅数据接口不做推送)
- 档案聚合摘要:summary(最新体重 / 疫苗进度 / 下次接种 / 当月花费,事实表实时聚合不持久化展示值)
- 照片/附件本迭代不做(ADR-010,media 域待对象存储选型)
- **当前状态**:模块骨架 + T2-03(CRUD + 权限框架)施工中;数据表已由 V3 建好
## 关键纪律
1. **契约先行**:所有对外端点以 `patbond-doc/docs/api/openapi.yaml` 为唯一事实源,新接口先冻结契约再实现(M2 起)。
2. **单迁移链**:数据库迁移只进 patbond-user,新表按域用 schema 前缀区分(identity / platform / pet_health / …)。
3. **服务间调用**MVP 阶段 Feign 静态 URL 直连、无注册中心(ADR-002,Nacos 已移除);微服务化阶段再引入。
4. **配置**:敏感配置走 `.env` / `application.yml`gitignore+ `.sample` 模式,环境变量注入(`PATBOND_DB_URL` 等)。
5. **测试**:集成测试一律 Testcontainerspostgres:18ADR-006/008),每模块交付 `./mvnw clean test` 必绿。
## 演进方向
- **微服务化**(ADR-002 预留):模块边界即服务边界,pet 域可整模块独立部署;届时引入配套版本 Spring Cloud Alibaba。
- **M5 marketplace 域**V3 已裁剪的 4 条跨 schema 外键(vaccinations/health_events → providers/bookings)由 M5 迁移补回。
- **media 域**:对象存储选型拍板后另立迭代实现(宠物头像、疫苗证书、健康事件附件)。
## 相关文档
- 技术决策记录:[decisions.md](decisions.md)ADR-001~015
- API 契约:`docs/api/openapi.yaml`
- 各迭代过程报告:开发文档 → 第一/第二迭代