feat(backend): establish gin sqlite service skeleton
This commit is contained in:
+20
-24
@@ -16,10 +16,10 @@
|
||||
| 第一层任务源 | UTF-8 无 BOM 四行蝦皮订单文本 + 同订单号 JPEG | 已实现 | `task-contract` 共享 `ProbeTask/TaskSource`;CLI 输出到 `.local/`,只有显式 Debug 属性才注入 APK,默认构建会清除私有资产。 |
|
||||
| Android 长任务 | 前台服务 + 持续通知 | 计划采用 | 降低执行中被系统挂起的风险,仍需处理进程死亡恢复。 |
|
||||
| 后端语言 | Go 1.23.0 | MVP 已定 | 与现有本机工具链一致;构建测试必须设置 `GOTOOLCHAIN=local` 防止静默升级。 |
|
||||
| 后端骨架 | Go Blueprint v0.10.11 生成的最小 Gin + SQLite 工程 | MVP 已定 | 只作为一次性脚手架输入;生成后立即重写版本约束。 |
|
||||
| 后端骨架 | Go Blueprint v0.10.11 生成的最小 Gin + SQLite 工程 | 已接入并收敛 | 只作为一次性脚手架输入;演示路由、默认 CORS、`.env` 自动加载、单例和 fatal 行为均已删除。 |
|
||||
| 后端框架 | Gin v1.11.0 | MVP 已定 | 这是 `go.mod` 明确支持 Go 1.23.0 的最高已核实 Gin 版本。 |
|
||||
| 数据访问 | 标准库 `database/sql` | MVP 已定 | 领域层通过仓储接口访问,避免先引入 ORM 和代码生成复杂度。 |
|
||||
| 数据迁移 | Goose v3,使用 SQL migration | MVP 已定 | 迁移可审核、可排序并支持 SQLite;版本在 T-201 建立 `go.mod` 时锁定。 |
|
||||
| 数据迁移 | Goose v3.26.0,使用嵌入式 SQL migration | 已验证 | v3.26.0 是已核实仍声明 Go 1.23.0 的最高版本;v3.27.x 要求 Go 1.25。 |
|
||||
| 管理 Web | Gin + `html/template` + `embed` + 少量原生 JS/CSS | MVP 已定 | 不单独引入 SPA 工程,模板和静态资源随服务构建。 |
|
||||
| 数据库 | SQLite | MVP 已定 | 单服务、单设备验证足够;多实例或并发提升前迁移 PostgreSQL。 |
|
||||
| 图片/截图 | 后端受控本地文件目录,数据库存元数据 | MVP 已定 | 禁止把二进制直接塞入日志;生产再评估对象存储。 |
|
||||
@@ -27,7 +27,7 @@
|
||||
| App 鉴权 | 采购员登录态 + 设备绑定令牌 | 目标已定,细节待实现 | 人员身份与设备身份分离;令牌只保存哈希。 |
|
||||
| VLM 接入 | 应用内统一适配器,优先兼容 OpenAI 风格多模态接口 | 需求提取与候选评估已实现,供应商待定 | T-103/T-104 使用严格 JSON Schema、单候选单次调用和 2048 px 图片上限;GUI-Owl/MAI-UI 动作模型不具备需求提取能力。 |
|
||||
| 通知 | MVP 不使用推送 | 已定 | 点击“获取任务”调用原子 claim API;V2 再评估厂商推送/WebSocket。 |
|
||||
| 后端测试 | 标准库 `testing` + `httptest` | MVP 已定 | 覆盖状态机、权限、幂等、SQLite 事务和输入校验。 |
|
||||
| 后端测试 | 标准库 `testing` + `httptest` | 骨架已验证 | 当前 25 个测试覆盖配置、SQLite pragma/外键、迁移、健康检查、安全 recovery、错误合约、路由和有界关闭;后续任务再增加状态机、权限与幂等。 |
|
||||
| Android 测试 | Gradle `test` + `kotlinx-coroutines-test` 1.7.3 + 真实设备 smoke | Phase 1 探针已验证 | 166 次测试覆盖 runner、动态页面分类、受控证据、VLM schema、人工确认策略与隐私;OnePlus PKG110 上完成私有 fixture + 本机 mock 的需求提取和 5 候选评估 smoke。 |
|
||||
| 部署 | 单机局域网 Go 服务;容器化后置 | MVP 已定 | Android 测试机必须能通过 HTTPS 或受控测试网络访问。 |
|
||||
|
||||
@@ -87,15 +87,13 @@ go-blueprint create --name backend-api --framework gin --driver sqlite --git ski
|
||||
```
|
||||
|
||||
Go Blueprint v0.10.11 当前生成的是 `Go 1.25.0 + Gin 1.12.0`,不能直接作为本项目
|
||||
的 `go.mod`。2026-07-25 已在临时目录将生成结果调整为以下版本,并在
|
||||
`GOTOOLCHAIN=local` 下完成 `go mod tidy` 和 `go test ./...`:
|
||||
的 `go.mod`。2026-07-25 已在仓库外临时目录核实生成树,并把正式 `go.mod` 固定为:
|
||||
|
||||
```text
|
||||
go 1.23.0
|
||||
github.com/gin-gonic/gin v1.11.0
|
||||
github.com/gin-contrib/cors v1.7.6
|
||||
github.com/joho/godotenv v1.5.1
|
||||
github.com/mattn/go-sqlite3 v1.14.48
|
||||
github.com/pressly/goose/v3 v3.26.0
|
||||
```
|
||||
|
||||
Gin v1.12.0 的 `go.mod` 要求 Go 1.25.0,因此本项目禁止升级到 Gin 1.12.x,除非先
|
||||
@@ -116,20 +114,18 @@ RabbitMQ、NATS 和 gRPC 为主,不符合最小 Gin + SQLite 边界。
|
||||
```text
|
||||
android-buyer/ # 已接入的 Roubao Kotlin Android App
|
||||
backend-api/
|
||||
cmd/api/ # 进程入口,只负责装配和生命周期
|
||||
internal/domain/ # 实体、状态机和确定性规则
|
||||
internal/usecase/ # 创建、领取、执行和结果归档
|
||||
internal/transport/http/ # Gin handler、中间件和页面
|
||||
internal/repository/sqlite/ # database/sql 仓储
|
||||
internal/platform/ # 配置、日志、文件和 VLM 适配器
|
||||
migrations/ # Goose SQL migration
|
||||
web/templates/ # html/template
|
||||
web/static/ # 少量 CSS/JS
|
||||
var/ # 本地运行数据,必须忽略
|
||||
cmd/api/ # API 进程装配、信号和优雅关闭
|
||||
cmd/migrate/ # 显式 migration up/down/status
|
||||
internal/config/ # 环境变量和安全默认
|
||||
internal/platform/database/ # SQLite 打开、pragma 和生命周期
|
||||
internal/platform/migration/ # Goose provider 封装
|
||||
internal/transport/httpapi/ # Gin 路由、健康检查和 HTTP Server
|
||||
migrations/ # 嵌入式 Goose SQL migration
|
||||
var/ # 本地运行数据,必须忽略
|
||||
docs/
|
||||
```
|
||||
|
||||
目录在真实骨架建立后以代码为准并同步本文。
|
||||
`domain/usecase/repository/sqlite/web` 将在对应业务任务出现真实代码时创建,不提交空包。
|
||||
|
||||
## 构建与运行命令
|
||||
|
||||
@@ -137,13 +133,13 @@ docs/
|
||||
| --- | --- | --- |
|
||||
| Android 标准验证 | `.\init.ps1` | 已验证 |
|
||||
| Android 构建 | `android-buyer\gradlew.bat assembleDebug --no-daemon` | 已验证 |
|
||||
| Android 测试任务 | `android-buyer\gradlew.bat test --no-daemon` | 已验证;当前全工程 78 次测试通过 |
|
||||
| Android 测试任务 | `android-buyer\gradlew.bat test --no-daemon` | 已验证;当前全工程 166 次测试通过 |
|
||||
| Android 安装/启动 | `$env:RUN_START_COMMAND="1"; .\init.ps1` | 已在 Android 16 真机验证 |
|
||||
| 后端依赖 | `go mod download`(在 `backend-api/`) | 待 `T-201` |
|
||||
| 后端测试 | `go test ./...`(在 `backend-api/`) | 待 `T-201` |
|
||||
| 后端构建 | `go build -o bin/cmroubao-api.exe ./cmd/api` | 待 `T-201` |
|
||||
| 后端启动 | `go run ./cmd/api` | 待 `T-201` |
|
||||
| 数据迁移 | `goose -dir migrations sqlite3 ./var/cmroubao.db up` | 待 `T-201` |
|
||||
| 后端依赖 | `$env:GOTOOLCHAIN="local"; go mod download`(在 `backend-api/`) | 已验证 |
|
||||
| 后端测试 | `$env:GOTOOLCHAIN="local"; go test ./...; go vet ./...` | 已验证;25 个测试 |
|
||||
| 后端构建 | `go build -o bin/cmroubao-api.exe ./cmd/api` 与 `./cmd/migrate` | 已验证 |
|
||||
| 后端启动 | `go run ./cmd/api` | 已完成本机 HTTP smoke |
|
||||
| 数据迁移 | `go run ./cmd/migrate up` | 已完成 `status/up/up/down/up` smoke |
|
||||
|
||||
`gradlew installDebug` 在当前 Android 16 设备上由旧版 AGP/ddmlib 返回 `-99`,
|
||||
但 SDK Platform Tools 37.0.0 的 `adb install -r -t` 成功。标准脚本因此使用 SDK
|
||||
|
||||
Reference in New Issue
Block a user