Files
huangping 3f577b34d5 feat(platform): I1 bootstrap, I2 M1 APIs, OpenAPI SSOT, and CI guards
Deliver dual Spring Boot services (platform API + webhook ingress), JWT
auth, Flyway with isolated history tables, customer/project/dictionary
endpoints, OpenAPI snapshot under contracts/, RUNBOOK, and CI that runs
on services/web/contracts paths plus enforcer + dependency tree ban on
craftlabs-auth-bitanswer.

Made-with: Cursor
2026-04-06 21:04:56 +08:00

52 lines
2.6 KiB
Markdown
Raw Permalink 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.
# 平台后端服务(I1 骨架)
**`java/craftlabs-auth-*` SDK 分构建线**,坐标 `cn.craftlabs.platform`**不依赖** `craftlabs-auth-bitanswer`
- **部署与运维**[RUNBOOK.md](RUNBOOK.md)
- **OpenAPI 契约(SSOT**[../contracts/README.md](../contracts/README.md)
- **误依赖门禁**`maven-enforcer-plugin``validate`+ CI `dependency:tree` 扫描 `craftlabs-auth-bitanswer`
| 模块 | 端口 | 说明 |
|------|------|------|
| `license-webhook-ingress` | 8081 | `POST /webhook/bitanswer/callback`,头 `x-bitanswer-token`(可选 `CRAFTLABS_WEBHOOK_EXPECTED_TOKEN`);**Flyway** 建表 `webhook_callback_receipt`**Idempotency-Key** 落库幂等 |
| `delivery-platform-api` | 8080 | **M1**`GET|POST /api/v1/customers``GET|PUT|DELETE /api/v1/customers/{id}`DELETE 软删 → `INACTIVE`);`GET|POST /api/v1/projects``GET|PUT|DELETE /api/v1/projects/{id}`DELETE 物理删);`GET /api/v1/dictionaries/{type}`;另 `POST /api/v1/auth/login``GET /api/v1/ping`、JWT `Authorization: Bearer`、**OpenAPI** `/swagger-ui.html`**Flyway** 表 `flyway_platform_api` |
生产须设置 **`PLATFORM_JWT_SECRET`**(≥32 字符)。
## I2 / M1(客户与项目)
| 路径 | 说明 |
|------|------|
| `/api/v1/customers` | 客户分页 CRUD(删除为软删 `INACTIVE` |
| `/api/v1/projects` | 项目分页 CRUD(删除为物理删除) |
| `/api/v1/dictionaries/{type}` | 字典项,如 `PROJECT_PHASE` |
Flyway 历史表:`delivery-platform-api`**`flyway_platform_api`**`license-webhook-ingress`**`flyway_webhook`**。
## 构建 Fat JAR
```bash
mvn -f services/pom.xml -pl license-webhook-ingress -am clean package
mvn -f services/pom.xml -pl delivery-platform-api -am clean package
```
产物:`*/target/*.jar`spring-boot-maven-plugin repackage)。
## Spring Boot 版本
父 POM 当前为 **3.4.5**(易解析);产品目标 **4.0.\*** 时升级 `services/pom.xml``spring-boot.version` 并全量回归。
## 数据层(架构约定)
| 项 | 说明 |
|----|------|
| **数据库** | **PostgreSQL 15** |
| **ORM** | **MyBatis-Plus**`mybatis-plus-spring-boot3-starter`,版本见父 POM `mybatis-plus.version` |
本地起库:`docker compose -f services/docker-compose.yml up -d`,默认库名 `craftlabs_platform`、用户/密码 `craftlabs`/`craftlabs`,与 `delivery-platform-api``application.yml` 默认值一致。
Maven 单测使用 **H2PostgreSQL 兼容模式)**,不强制本机安装 PostgreSQL。
## 环境变量(数据源,可选)
覆盖默认 JDBC 时使用:`SPRING_DATASOURCE_URL``SPRING_DATASOURCE_USERNAME``SPRING_DATASOURCE_PASSWORD`