76fd425ca7
- docs/README.md: 文档目录补充营销图模块入口 - docs/marketing/README.md: 模块概述、代码结构、数据模型、路由表、依赖说明、管理后台 - docs/marketing/API.md: 完整 API 文档(小程序端+管理后台,含请求/响应示例) Made-with: Cursor
100 lines
3.7 KiB
Markdown
100 lines
3.7 KiB
Markdown
# 文档目录
|
||
|
||
本仓库支持多个小程序共用一套后端。文档按“公共约定 + 每个小程序一个目录”的方式组织。
|
||
|
||
## 公共文档(所有小程序通用)
|
||
|
||
- `docs/common/README.md`
|
||
- `docs/common/auth.md`
|
||
- `docs/common/response.md`
|
||
- `docs/common/upload_qiniu.md`
|
||
- `docs/common/wechat_official.md`
|
||
- `docs/common/redis.md`
|
||
|
||
## 去水印小程序
|
||
|
||
- `docs/remove_watermark/README.md`
|
||
- `docs/remove_watermark/API.md`
|
||
|
||
## 戒烟/抽烟记录小程序
|
||
|
||
- `docs/smoke/README.md`
|
||
- `docs/smoke/API.md`
|
||
|
||
## 营销图管理小程序
|
||
|
||
- `docs/marketing/README.md`
|
||
- `docs/marketing/API.md`
|
||
- 前端仓库:[hello-dd-code/marketing](https://github.com/hello-dd-code/marketing)
|
||
|
||
## 律师信息上报接口
|
||
|
||
- `docs/lawyer/README.md`
|
||
|
||
## 配置
|
||
|
||
1. 复制 `.env.example` 为 `.env`。
|
||
2. 按实际环境填写以下变量:
|
||
- `SERVER_PORT`:HTTP 服务端口,例如 `8080`。
|
||
- `DB_HOST/DB_PORT/DB_USER/DB_PASSWORD/DB_NAME`:MySQL 连接信息。
|
||
- 若需连接额外数据库,可设置 `DB_INSTANCES=lawyer,reporting` 并依次提供 `DB_<NAME>_HOST/PORT/USER/PASSWORD/NAME`;未指定的字段会回落到默认数据库的同名配置。
|
||
3. 如果需要,替换 `GIN_MODE`、`JWT_SECRET` 等其他变量。
|
||
4. 通过 `docs/sql/users.sql` 初始化 `mini_programs` 与 `users` 表,并插入每个小程序的 `name/app_id/app_secret`。
|
||
|
||
## 启动
|
||
|
||
```bash
|
||
go run ./cmd/api
|
||
```
|
||
|
||
启动流程:
|
||
1. 加载 `.env`。
|
||
2. 初始化数据库连接(参见 `internal/database/database.go`)。
|
||
3. 自动迁移相关数据表(用户表、去水印日志表、戒烟记录表、营销图表等)。
|
||
4. 注册路由并启动 Gin HTTP 服务。
|
||
|
||
## 数据表
|
||
|
||
### `mini_programs`
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| `id` | bigint unsigned | 小程序 ID,登录接口需传 |
|
||
| `name` | varchar(100) | 业务名称或备注 |
|
||
| `app_id` | varchar(100), unique | 微信小程序 `appId` |
|
||
| `app_secret` | varchar(200) | 微信小程序 `appSecret`(明文存储,注意权限) |
|
||
| `description` | varchar(255) | 可选描述 |
|
||
| `created_at/updated_at/deleted_at` | timestamp | GORM 默认时间戳 |
|
||
|
||
### `users`
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| `id` | bigint unsigned (auto increment) | 主键 |
|
||
| `mini_program_id` | bigint unsigned | 外键,关联 `mini_programs.id` |
|
||
| `open_id` | varchar(100) | 与 `mini_program_id` 组合成唯一键 |
|
||
| `union_id` | varchar(100), nullable | 微信 `unionid`(若有) |
|
||
| `nick_name` | varchar(100) | 用户昵称 |
|
||
| `avatar_url` | varchar(500) | 头像地址 |
|
||
| `gender` | tinyint, default 0 | 性别(与小程序一致) |
|
||
| `phone` | varchar(20) | 手机号 |
|
||
| `session_key` | varchar(100) | 微信会话密钥 |
|
||
| `created_at/updated_at/deleted_at` | timestamp | GORM 默认时间戳 |
|
||
|
||
## 登录接口
|
||
|
||
登录接口属于公共能力,请查看:`docs/common/auth.md`。
|
||
|
||
## 健康检查
|
||
|
||
`GET /healthz` 返回 `{"status": "ok"}`,用于部署探活。
|
||
|
||
更多子系统/专题文档请查阅 `docs/*` 子目录,例如 `docs/remove_watermark/README.md` 描述了去水印小程序的详细需求。
|
||
|
||
## 多小程序共用后台设计
|
||
|
||
- **凭证管理表**:`mini_programs` 持久化 `name/app_id/app_secret`,可通过后台页面或 SQL 插入,避免把密钥写进环境变量。
|
||
- **接口约定**:小程序端调用登录接口时传入 `mini_program_id`。服务端通过该 ID 读取凭证,动态拼装 `jscode2session` 请求。
|
||
- **数据隔离**:`users` 以 `mini_program_id + open_id` 建立唯一索引,同一 `openid` 在不同小程序下互不影响。
|
||
- **扩展性**:后续如需在用户层面区分策略(如积分、营销),可直接以 `mini_program_id` 作为维度做统计或挂载其他表。
|