lixi
|
49299fb4eb
|
feat: Flyway V3 pet_health 结构基线 + V4 字典种子 + pet 域错误码(T2-01)
- V3:pet_health schema 8 张表(breeds/pets/pet_owners/pet_weight_records/
vaccine_catalog/pet_vaccinations/health_events/care_reminders),列、CHECK、
部分唯一索引、updated_at 触发器与目标模型一致
- 强制裁剪:剥离 bootstrap SQL 1156~1166 行 4 条指向 marketplace 的跨 schema
外键(provider_id/booking_id 保留为裸可空 uuid,M5 迁移 marketplace 时补回)
- ADR-010:health_event_media 不建(media 剪出 M2,纯增量表后续补零成本)
- V4:breeds(28 条)与 vaccine_catalog(10 条)字典种子,生产参考数据走正式
迁移链不放 db/dev;正典目录内容由产品侧供稿(D2-6)
- ErrorCode 预置 pets 域四码:40300 PET_ACCESS_DENIED、40401 PET_NOT_FOUND、
40402 RECORD_NOT_FOUND、40902 VERSION_CONFLICT(第二波接口直接消费)
- 新增 PetHealthMigrationIntegrationTest:干净 postgres:18 上全量迁移验证
表数、结构抽查、4 条 FK 确不存在、触发器与种子数据
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-09-07 14:34:19 +08:00 |
|
lixi
|
0d81c38fc6
|
fix: CI 移除全部外部 action 依赖,checkout 改为手动克隆本 Gitea 实例
CI / backend-test (push) Successful in 3m18s
- Gitea 1.20+ 的 DEFAULT_ACTIONS_URL 仅接受 github/self,自定义 gitea.com 不生效,
actions/checkout 回落 github.com 克隆(服务器不可达,实测 unexpected EOF)
- checkout 改为 git init + 从 ${{ github.server_url }} 认证克隆(github.token),
与 apt 装 JDK 一起实现全链路零 GitHub 依赖
|
2026-09-04 18:13:34 +08:00 |
|
lixi
|
b38b0d83bb
|
fix: CI 改用 apt 安装 JDK17 并加 concurrency 取消旧 run
CI / backend-test (push) Failing after 1m31s
- setup-java 从 github.com 下载 JDK 二进制在服务器网络不可达(实测 ETIMEDOUT),
改为 apt 安装 openjdk-17-jdk-headless,apt 源优先切腾讯云镜像
- 同分支连推提交时自动取消旧的排队/进行中 run
|
2026-09-04 18:02:23 +08:00 |
|
lixi
|
6d47c5a2b6
|
feat: 埋点接收端落地——V2 迁移 + POST /api/v1/events 批量上报(报告 13)
CI / backend-test (push) Failing after 1m31s
- Flyway V2:platform.product_events(客户端 UUIDv7 主键即幂等键,user_id 不设外键,client_ts 合理性约束,三索引),DDL 照报告 13 §2.2
- POST /api/v1/events(报告 13 §1 OpenAPI):批量 1-50 条、202 逐条结果(accepted/duplicate/rejected)、eventId ON CONFLICT 去重、字典 v1 白名单(11 个 auth_* + 工单增补 page_viewed/health_record_action)、字典外 props 剥离计数、隐私红线字段整条拒绝(forbidden_field)、认证请求 userId 与 token subject 不一致拒绝(identity_mismatch)
- BearerAuthFilter 对 /api/v1/events 改为可选鉴权(规范:唯一允许匿名的写端点;带 token 仍严格验签 401/40101)
- 日志红线:props 内容不落日志(仅计数与字段名告警)
- 门禁:./mvnw clean test → BUILD SUCCESS,82 测试 0 失败(新增 AnalyticsIntegrationTest 7 例:V2 生效/匿名落库/未知事件拒绝/去重/剥离/红线拒绝/参数 40000)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-09-04 17:09:00 +08:00 |
|
lixi
|
b22eaede28
|
update
CI / backend-test (push) Successful in 9m51s
|
2026-09-04 16:53:43 +08:00 |
|
lixi
|
6528a06c28
|
feat: auth_sessions 死亡行定时清理任务(报告 16 遗留 §9.3)
CI / backend-test (push) Failing after 8m10s
- SessionCleanupJob(@Scheduled,间隔/初始延迟/保留期均配置项,默认 6h/10m/30d)删除撤销或过期超过保留期的会话行;保留期即重用检测窗口(已撤销行是重用比对对象),注释与 sample 已说明
- 多实例并发安全(幂等 DELETE);轮换链 FK 由 ON DELETE SET NULL 释放
- 门禁:./mvnw clean test → BUILD SUCCESS,75 测试 0 失败(新增 SessionCleanupIntegrationTest:仅删超期死亡行,存活与近期撤销行保留)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-09-04 15:45:38 +08:00 |
|
lixi
|
3f6e8187cf
|
chore: 新增 Gitea Actions CI 门禁工作流(审计 M3)
CI / backend-test (push) Failing after 16m6s
- .gitea/workflows/ci.yml:push(dev)/PR 触发 ./mvnw -B clean test,与本地门禁同一命令
- 服务器侧启用前提(开启 Actions、注册带 Docker 的 act_runner)已写入文件头注释;未启用时本文件无副作用
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-09-04 14:52:55 +08:00 |
|
lixi
|
ab0265c17b
|
feat: Docker Compose 最小编排——postgres:18 + 双无状态服务容器(ADR-007)
- 新增 docker-compose.yml、两服务 Dockerfile(eclipse-temurin:17-jre、非 root、仅装 exec jar)与 deploy/init-secrets.sh(幂等生成 RS256 密钥对与 .env 随机机密,产物入 .gitignore)
- 容器配置复用 application.yml.sample(SPRING_CONFIG_LOCATION 挂载)+ PATBOND_* 环境变量,与本机运行同一套约定;DB 端口不对宿主机发布
- spring-boot-maven-plugin 显式绑定 repackage(本工程无 starter-parent,此前 package 产物不可执行),exec classifier 保留普通 jar 供 auth 模块 E2E 依赖
- 验收:docker compose up -d --build 后完整冒烟通过(register→me→refresh→旧 token 重用 40102→/internal 无凭证 401→logout),down -v 无残留;./mvnw clean test 全绿 74 测试
- README 新增 Docker Compose 一节
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-09-04 14:51:34 +08:00 |
|
lixi
|
8a799719ff
|
fix: 响应信封不再泄露派生字段 success,严格等于 {code, message, data}
- ApiResponse.isSuccess() 加 @JsonIgnore(common 引入 jackson-annotations,仅注解不含 databind);三波以来所有响应都多带了一个契约外的 success 字段,前端解析器忽略未知字段,无破坏
- 测试补断言 $.success doesNotExist;门禁:./mvnw clean test → BUILD SUCCESS,74 测试 0 失败
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-09-04 14:51:34 +08:00 |
|
lixi
|
8bdaf53222
|
feat: 会话记录接入客户端 X-Device-Id(auth_sessions.device_id)
- Flutter 端每次请求已携带 X-Device-Id;auth 读取该头(截断 128)经 CreateSessionRequest 透传,user 落 auth_sessions.device_id,为多设备会话列表备数据
- 门禁:./mvnw clean test → BUILD SUCCESS,74 测试 0 失败(新增 registerForwardsDeviceIdHeaderToTheSessionRecord + 会话落库断言)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-09-04 14:43:44 +08:00 |
|
lixi
|
4dc3dcdfa3
|
feat: JWT RS256 + refresh 会话轮换与 /api/v1 契约落地(ADR-003)
- 会话逻辑下沉 patbond-user(新 /internal/sessions;auth_sessions 只存 SHA-256 摘要,刷新即轮换并链 token_family,重用撤销整个 family,退出仅撤当前会话,多设备并行)
- patbond-auth 作薄入口签发 RS256 JWT(access 15m / refresh 30d 均为配置项;密钥经环境变量注入,仓库零密钥材料,测试密钥运行时生成);公开端点迁至 /api/v1,冻结契约字段零偏差,expiresAt 无时区遗留修复
- /internal/** 加 X-Internal-Token 服务间鉴权(无凭证 401);/api/v1/me 由 user 以公钥本地验签(40101/40102 新错误码)
- 登录失败限制:按用户名 15 分钟窗口 5 次锁 15 分钟(423/42300,DB 原子计数,可配置)
- 修复两处存量缺陷:ErrorDecoder 未注册进 Feign 子上下文、JDK HttpURLConnection 对流式 POST 的 401 读不到错误体(引入 feign-hc5)——真实调用中下游错误码此前一律折叠为 503
- 门禁:JAVA_HOME=/usr/lib/jvm/java-17-openjdk ./mvnw clean test → BUILD SUCCESS,73 测试 0 失败(37→73),含同 JVM 双服务真实 HTTP E2E:注册→me→刷新→旧 refresh 重用被拒且 family 撤销→退出后 refresh 失效;Testcontainers postgres:18,无遗留容器
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-09-04 12:15:40 +08:00 |
|
lixi
|
43ab6c5827
|
test: Testcontainers 数据库镜像升级为 postgres:18(ADR-008)
- 验收:JAVA_HOME=jdk17 ./mvnw clean test 全量 37 测试 0 失败,Flyway V1 于 PostgreSQL 18.6 执行无兼容问题
|
2026-09-04 11:34:08 +08:00 |
|
lixi
|
bd20adc700
|
feat: 用户 UUID 持久化与统一异常契约(Flyway baseline / UUIDv7 / 错误码透传)
- Flyway V1 baseline:identity 全部 5 表 + media.assets + platform 最小硬依赖(set_updated_at/regions),无 fixture 凭据;dev 种子独立为 afterMigrate 回调且默认不执行
- patbond-user 迁移到 PostgreSQL:UUIDv7 主键、JdbcClient 仓储、bcrypt 密码、唯一性依赖 DB 约束翻译为 409、E.164 手机号校验对齐 ck_users_phone
- 统一异常契约:common 新增 ErrorCode/BusinessException,两服务 GlobalExceptionHandler;auth 经 ApiErrorDecoder 原码透传下游错误,修复状态码折叠(审计 M1)
- 门禁:JAVA_HOME=jdk17 ./mvnw clean test,37 个测试 0 失败(含 Testcontainers postgres:16 集成测试),BUILD SUCCESS
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-09-04 10:34:48 +08:00 |
|
lixi
|
c7ddaecb76
|
重构底层框架
|
2026-09-03 17:59:56 +08:00 |
|
nmbh1122@126.com
|
5a52b44d46
|
chore: move local configs to sample files
|
2026-07-20 16:22:54 +08:00 |
|
nmbh1122@126.com
|
8cfc574247
|
feat(update):更新nacos配置文件
|
2026-07-20 14:56:05 +08:00 |
|
nmbh1122@126.com
|
c743b7a753
|
Add project README
|
2026-07-13 09:48:26 +08:00 |
|
nmbh1122@126.com
|
c43f30175d
|
Ignore build outputs
|
2026-07-13 09:41:33 +08:00 |
|
nmbh1122@126.com
|
b1252b991d
|
Initialize patbond microservice modules
|
2026-07-13 09:41:15 +08:00 |
|