update
This commit is contained in:
34
README.md
34
README.md
@ -1,6 +1,6 @@
|
||||
# Fashion API
|
||||
|
||||
秀场 / 品牌档案对外只读 API 服务(Go + Gin + GORM/MySQL)。
|
||||
秀场 / 品牌档案对外只读 API 服务(Go + Gin + GORM/PostgreSQL)。
|
||||
|
||||
本项目是从原 `admin/backend`(后台管理接口)中**剥离对外只读接口**后独立出的服务,
|
||||
专门服务于前端项目 `test/test`(`D:\project\test\test`)。它只保留前端实际调用的公开接口,
|
||||
@ -53,11 +53,11 @@
|
||||
```
|
||||
cmd/ 组合根(Composition Root):只做依赖装配,不含业务逻辑
|
||||
server/ 启动 HTTP 服务
|
||||
migrate/ 独立结构迁移命令
|
||||
dbtool/ 跨环境数据搬运(dump/import)
|
||||
internal/ 业务代码(不对外暴露)
|
||||
config/ 配置加载(yml + 环境变量覆盖 + 默认值)
|
||||
model/ 实体定义(gorm tag + json tag,PasswordHash 永不出参)
|
||||
database/ MySQL 连接池 / 迁移
|
||||
database/ PostgreSQL 连接池 / 自动迁移(AutoMigrate)
|
||||
repository/ 数据访问(接口 + GORM 实现,查询条件用 Scope 安全组合)
|
||||
service/ 业务逻辑(JWT 签发、密码哈希、参数归一化、聚合)
|
||||
dto/ 请求/响应结构体与边界常量
|
||||
@ -75,8 +75,8 @@ internal/ 业务代码(不对外暴露)
|
||||
避免原项目“复用同一个 `*gorm.DB` 实例导致 WHERE 串味”的隐患。
|
||||
- **排序字段白名单**:`orderBy` 只允许白名单内的值,杜绝 SQL 注入。
|
||||
- **配置统一收敛到 yml**:见第 3 节。
|
||||
- **迁移从启动流程剥离**:`auto_migrate` 默认 `false`,改用独立 `cmd/migrate` 命令显式执行,
|
||||
避免每次启动都对 `brand_runway_images`(89 万行)等大表隐式 `ALTER TABLE`。
|
||||
- **表结构由 GORM AutoMigrate 托管**:服务启动时幂等创建/更新全部表(替代原 `scripts/sql`、`db/migrations` 下的手写 MySQL 迁移脚本),
|
||||
跨环境数据搬运经 `cmd/dbtool`(dump/import)。如需避免大表启动期加列,可在部署流程中先行 `dbtool import` 建好结构。
|
||||
- **修复原项目配置隐患**:原 `admin/backend` 代码只读 `DB_PASS`,而 docker-compose 注入的是
|
||||
`DB_PASSWORD`,二者不一致;本项目同时兼容 `DB_PASSWORD` 与 `DB_PASS`,`DB_PASSWORD` 优先。
|
||||
|
||||
@ -101,7 +101,7 @@ internal/ 业务代码(不对外暴露)
|
||||
| `GIN_MODE` | server.mode |
|
||||
| `DB_HOST` / `DB_PORT` / `DB_USER` / `DB_NAME` | 数据库连接 |
|
||||
| `DB_PASSWORD`(或 `DB_PASS`) | database.password |
|
||||
| `DB_LOG_LEVEL` / `DB_AUTO_MIGRATE` | GORM 日志 / 自动迁移开关 |
|
||||
| `DB_LOG_LEVEL` | GORM 日志级别 |
|
||||
| `JWT_SECRET` / `JWT_EXPIRE_HOURS` | 令牌密钥 / 有效期 |
|
||||
| `UPLOAD_DIR` / `UPLOAD_URL_PREFIX` | 静态资源目录 / 前缀 |
|
||||
| `CONFIG_PATH` | 显式指定配置文件路径(优先级高于 `-config` 参数) |
|
||||
@ -118,24 +118,26 @@ internal/ 业务代码(不对外暴露)
|
||||
### 前置要求
|
||||
|
||||
- Go 1.26+
|
||||
- MySQL 8.x(本项目对接 WSL 1Panel 本地库:`127.0.0.1:3306`,库名 `db`,账号 `root/root`)
|
||||
- PostgreSQL 16(+ pgvector,见 `scripts/pgvector` 的 Docker 一键起库):`127.0.0.1:5432`,库名 `fashion`,账号 `fashion/fashion_dev_2026`
|
||||
|
||||
### 构建
|
||||
|
||||
```bash
|
||||
# 两个可执行文件:server(API 服务)与 migrate(结构迁移)
|
||||
# 主服务
|
||||
go build -o bin/server ./cmd/server
|
||||
go build -o bin/migrate ./cmd/migrate
|
||||
# 跨环境数据搬运工具(dump / import)
|
||||
go build -o bin/dbtool ./cmd/dbtool
|
||||
```
|
||||
|
||||
### 数据库迁移(可选,首次部署时执行一次)
|
||||
### 数据库迁移(结构自动创建)
|
||||
|
||||
迁移默认**不**随服务启动执行(`auto_migrate: false`)。需建表/加字段时:
|
||||
表结构**随服务启动自动执行** GORM AutoMigrate(幂等,仅增量变更,不重建已有表)。
|
||||
跨环境搬运全库数据(结构 + 数据)用 dbtool:
|
||||
|
||||
```bash
|
||||
./bin/migrate # 读取 configs/config.yml
|
||||
# 或指定配置文件
|
||||
./bin/migrate -config /path/to/config.yml
|
||||
go run ./cmd/dbtool dump -out db_dump.json # 导出当前库
|
||||
go run ./cmd/dbtool import -in db_dump.json # 在目标环境重建并回灌
|
||||
go run ./cmd/dbtool import -in db_dump.json -data-only # 仅导数据(结构已由 AutoMigrate 建好)
|
||||
```
|
||||
|
||||
### 启动服务
|
||||
@ -228,11 +230,11 @@ backend/
|
||||
│ └── config.yml # 唯一配置源
|
||||
├── cmd/
|
||||
│ ├── server/main.go # 组合根:启动 HTTP 服务 + 优雅关闭
|
||||
│ └── migrate/main.go # 组合根:独立结构迁移
|
||||
│ └── dbtool/main.go # 组合根:跨环境数据搬运(dump/import)
|
||||
├── internal/
|
||||
│ ├── config/ # 配置加载(yml + env + 默认值)
|
||||
│ ├── model/ # 实体(brand / runway / runway_image / user)
|
||||
│ ├── database/ # MySQL 连接池 + 迁移
|
||||
│ ├── database/ # PostgreSQL 连接池 + 自动迁移
|
||||
│ ├── repository/ # 数据访问(接口 + GORM 实现)
|
||||
│ ├── service/ # 业务逻辑
|
||||
│ ├── dto/ # 请求/响应结构体与边界常量
|
||||
|
||||
Reference in New Issue
Block a user