bba6dc6b4f03354abc3e9374c36ffd30e2b27ac9
- Replaced common upload handler and service with Qiniu-specific implementations in main.go and route registration. - Deleted outdated upload_handler.go and qiniu_service.go files to streamline the codebase. - Updated route definitions to utilize the new Qiniu upload handler for improved file upload management.
文档目录
本仓库支持多个小程序共用一套后端。文档按“公共约定 + 每个小程序一个目录”的方式组织。
公共文档(所有小程序通用)
docs/common/README.mddocs/common/auth.mddocs/common/response.mddocs/common/upload_qiniu.md
去水印小程序
docs/remove_watermark/README.mddocs/remove_watermark/API.md
戒烟/抽烟记录小程序
docs/smoke/README.mddocs/smoke/API.md
配置
- 复制
.env.example为.env。 - 按实际环境填写以下变量:
SERVER_PORT:HTTP 服务端口,例如8080。DB_HOST/DB_PORT/DB_USER/DB_PASSWORD/DB_NAME:MySQL 连接信息。
- 如果需要,替换
GIN_MODE、JWT_SECRET等其他变量。 - 通过
docs/sql/users.sql初始化mini_programs与users表,并插入每个小程序的name/app_id/app_secret。
启动
go run ./cmd/api
启动流程:
- 加载
.env。 - 初始化数据库连接(参见
internal/database/database.go)。 - 自动迁移相关数据表(用户表、去水印日志表、戒烟记录表等)。
- 注册路由并启动 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作为维度做统计或挂载其他表。
Description
Languages
Go
97.6%
Shell
2.4%