docs: 新增「初次部署(从零跑起来)」;去混淆字符与真实内网信息
- README.md / README.txt 新增初次部署章节:前置条件(JDK 17 / SDK 34 / Gradle 8.9)、 获取代码与本地配置(local.properties 不入仓)、Debug/Release 构建、装到手机与相机权限、 连接配置(只连 Windows 客户端,默认 8765 / /pose)、第一次跑通、自检清单、常见问题 - 单测数量按实际(30 项)修正 - 三库同源契约:':=' 写法修回、去掉真实 MariaDB 版本串 - 全文去除易被 Gitea 判为「模棱两可 Unicode」的字符 - 本机 JDK 路径与内网示例地址改占位符 / RFC 5737 文档网段
This commit is contained in:
+13
-13
@@ -1,4 +1,4 @@
|
||||
# contracts/data-models.md — 数据模型契约 v0.4.0
|
||||
# contracts/data-models.md - 数据模型契约 v0.4.0
|
||||
|
||||
Web 服务端是唯一权威定义,本文件是另两端消费的**稳定视图**。
|
||||
字段名在 JSON 中统一 `camelCase`;数据库列名 `snake_case`(见 `database.md`)。
|
||||
@@ -16,13 +16,13 @@ Web 服务端是唯一权威定义,本文件是另两端消费的**稳定视
|
||||
- 错误响应统一:
|
||||
|
||||
```json
|
||||
{ "statusCode": 400, "message": "…", "error": "Bad Request", "details": {} }
|
||||
{ "statusCode": 400, "message": "...", "error": "Bad Request", "details": {} }
|
||||
```
|
||||
|
||||
- **来源(出处)五元组**是必填项,出现在 `songs` / `motions` / `models` 三处:
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
|--|--|--|
|
||||
| `sourceType` | enum | 见 1.1 |
|
||||
| `sourceName` | string | 来源名称,如「官方曲库」「作者名」 |
|
||||
| `sourceUrl` | string | 来源链接,必须为 http(s) |
|
||||
@@ -52,7 +52,7 @@ rejected 已驳回
|
||||
## 2. `Song`
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|---|---|---|---|
|
||||
|--|--|--|--|
|
||||
| `id` | number | 读 | |
|
||||
| `title` | string | ✅ | 曲名,≤200 |
|
||||
| `artist` | string | ✅ | 演唱者,≤200 |
|
||||
@@ -71,7 +71,7 @@ rejected 已驳回
|
||||
## 3. `Motion`(动作数据)
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|---|---|---|---|
|
||||
|--|--|--|--|
|
||||
| `id` | number | 读 | |
|
||||
| `songId` | number\|null | | 关联曲目 |
|
||||
| `name` | string | ✅ | 动作名称,≤200 |
|
||||
@@ -82,7 +82,7 @@ rejected 已驳回
|
||||
| `frameCount` | number\|null | | 原始帧数 |
|
||||
| `durationMs` | number\|null | | |
|
||||
| `keypointFormat` | string\|null | 读 | 预处理后固定为 `mediapipe33@0.1.0` |
|
||||
| `keypointUrl` | string\|null | 读 | 预处理产物(NDJSON 或 .npz 的 JSON 封装) |
|
||||
| `keypointUrl` | string\|null | 读 | 预处理产物(NDJSON 或.npz 的 JSON 封装) |
|
||||
| `keypointFrames` | number\|null | 读 | 关键点帧数 |
|
||||
| `preprocessState` | enum | 读 | `none` / `running` / `done` / `failed` |
|
||||
| `preprocessError` | string\|null | 读 | |
|
||||
@@ -93,19 +93,19 @@ rejected 已驳回
|
||||
## 4. `Model`(角色模型,VRM 优先)
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|---|---|---|---|
|
||||
|--|--|--|--|
|
||||
| `id` | number | 读 | |
|
||||
| `name` | string | ✅ | 模型名称,≤200 |
|
||||
| `format` | enum | ✅ | `glb` / `vrm`(主力)/ `gltf` / `fbx`(历史数据)。上传的 PMX/FBX 会被服务端转换成 glb 或 vrm 再入库,见 model-formats.md §1.1 |
|
||||
| `format` | enum | ✅ | `glb` / `vrm`(主力)/ `gltf` / `fbx`(历史数据)。上传的 PMX/FBX 会被服务端转换成 glb 或 vrm 再入库,见 model-formats.md 1.1 |
|
||||
| `vrmVersion` | string\|null | 读 | `0.x` / `1.0`,非 VRM 为 null |
|
||||
| `isPrimary` | boolean | | 全局默认模型;**同一时刻全库至多一个 `true`** |
|
||||
| `fileUrl` | string | 读 | |
|
||||
| `fileSize` | number | 读 | |
|
||||
| `thumbnailUrl` | string\|null | 读 | |
|
||||
| `conversionNote` | string\|null | 读 | 由压缩包转换而来时的说明(`Hatsune Miku.pmx → GLB,已内嵌 2 张贴图`);直传模型为 null |
|
||||
| `fileSha256` | string\|null | 读 | 模型文件(转换产物)的 sha256 —— **每次转换都会变**,仅作记录 |
|
||||
| `conversionNote` | string\|null | 读 | 由压缩包转换而来时的说明(`Hatsune Miku.pmx -> GLB,已内嵌 2 张贴图`);直传模型为 null |
|
||||
| `fileSha256` | string\|null | 读 | 模型文件(转换产物)的 sha256 -- **每次转换都会变**,仅作记录 |
|
||||
| `sourceSha256` | string\|null | 读 | 上传压缩包的 sha256(稳定);默认模型匹配以它为准,非压缩包上传为 null |
|
||||
| `stats` | object\|null | 读 | 模型分析结果:面数 / 顶点数 / 贴图 / **骨骼树** / humanoid 覆盖 / 可驱动性,见 model-formats.md §1.1 |
|
||||
| `stats` | object\|null | 读 | 模型分析结果:面数 / 顶点数 / 贴图 / **骨骼树** / humanoid 覆盖 / 可驱动性,见 model-formats.md 1.1 |
|
||||
| `source*` | | ✅ | 来源五元组 |
|
||||
| `status` | `PublishStatus` | | |
|
||||
| `createdAt` / `updatedAt` | string | 读 | |
|
||||
@@ -124,7 +124,7 @@ rejected 已驳回
|
||||
2. models 中 format = 'vrm' 且 status = 'published' 且 is_primary = 1
|
||||
3. models 中 format = 'vrm' 且 status = 'published',按 id 升序取第一个
|
||||
4. models 中 status = 'published',按 (format='vrm' DESC, id ASC) 取第一个
|
||||
5. 无可用模型 → 客户端使用内置占位模型
|
||||
5. 无可用模型 -> 客户端使用内置占位模型
|
||||
```
|
||||
|
||||
第 0/1 步是 v0.3.0 新增:上传 MMD 模型压缩包并转换成功后,服务端会把该模型
|
||||
@@ -135,7 +135,7 @@ rejected 已驳回
|
||||
## 5. `ReviewRecord`(审核流水)
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
|--|--|--|
|
||||
| `id` | number | |
|
||||
| `targetType` | enum | `song` / `motion` / `model` |
|
||||
| `targetId` | number | |
|
||||
|
||||
Reference in New Issue
Block a user