Files
inchstep/docs/系统设计说明书.md
T
2026-06-25 08:39:47 +08:00

18 KiB
Raw Blame History

寸进(InchStep)系统设计说明书

文档版本:v1.0
更新日期:2026-06-24
对应后端:Go + Gin + GORM | 前端:Next.js / React Native / 微信小程序
状态:正式初稿


目录

  1. 文档概述
  2. 系统架构
  3. 技术选型与版本
  4. 模块设计
  5. 安全设计
  6. 性能设计
  7. 错误处理规范
  8. 日志与监控

1. 文档概述

1.1 文档目的

本文档是寸进(InchStep)综合成长打卡平台的技术设计说明书,面向后端、前端、测试、运维工程师,提供系统架构、模块划分、关键技术决策的详细说明。

1.2 适用范围

覆盖寸进平台 v1.0 全部功能模块的技术设计,包括:

  • 后端 API 服务的架构与模块设计
  • 前端三端(Web / App / 小程序)的架构要点
  • 数据库设计与数据流
  • 安全、性能、监控等横切关注点

1.3 参考文档

文档 说明
寸进_InchStep_详细需求说明书.md 产品需求与功能规格
docs/API设计文档.md API 接口详细定义
docs/数据库设计文档.md 数据库详细设计
docs/前端架构文档.md 前端三端架构设计
AGENTS.md 仓库编码规范与指南

2. 系统架构

2.1 架构总览

┌─────────────────────────────────────────────────────────────┐ │ 用户层 │ │ PC/移动浏览器 iOS/Android App 微信小程序 │ └──────────────────────┬──────────────────────────────────────┘ │ ┌──────────────────────▼──────────────────────────────────────┐ │ 前端层 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Web 端 │ │ App 端 │ │ 小程序 │ │ 管理后台 │ │ │ │ Next.js │ │ RN │ │ 原生/Taro│ │ React │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ └──────────────┼─────────────┼──────────────┘ │ │ │ shared/ │ │ │ 类型定义 / 常量 / 工具函数 │ └──────────────────────┬──────────────────────────────────────┘ │ HTTP REST (JSON) ▼ ┌──────────────────────────────────────────────────────────────┐ │ API 网关层 │ │ Nginx 反向代理 / 负载均衡 / 限流 │ └──────────────────────┬──────────────────────────────────────┘ │ ┌──────────────────────▼──────────────────────────────────────┐ │ 后端服务层(Go + Gin) │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ 中间件 │ │ │ │ JWT 认证 │ CORS │ 错误处理 │ 统一响应 │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │ 路由层 │ │ 处理器 │ │ 服务层 │ │ 模型层 │ │ 配置层 │ │ │ │ router │ │handler │ │service │ │ model │ │ config │ │ │ └────────┘ └───┬────┘ └───┬────┘ └───┬────┘ └────────┘ │ │ │ │ │ │ │ └──────────┼───────────┘ │ │ │ │ └────────────────────────────┼────────────────────────────────┘ │ ┌──────────────────┼──────────────────┐ ▼ ▼ ▼ ┌───────────────┐ ┌───────────────┐ ┌──────────────────┐ │ MySQL 8.0 │ │ Redis 7 │ │ S3 对象存储 │ │ 主数据库 │ │ 缓存/会话 │ │ 图片/视频 │ │ GORM ORM │ │ 排行榜 │ │ 资源文件 │ └───────────────┘ └───────────────┘ └──────────────────┘

2.2 架构风格

  • 前后端分离:前端三端(Web / App / 小程序)通过 RESTful API 与后端通信
  • 后端单体应用:v1.0 采用单体架构,按业务划分为 service 层,便于未来拆分为微服务
  • 共享代码层shared/ 目录存放 TypeScript 类型定义、常量和工具函数,三端复用

2.3 关键技术决策

决策 选择 理由
后端语言 Go 1.22 高性能、静态类型、编译部署简单、并发模型优秀
Web 框架 Gin Go 生态最流行的 HTTP 框架,性能优异,中间件丰富
ORM GORM 功能完善、自动迁移、与 Prisma 映射直观
数据库 MySQL 8.0 成熟稳定、文档丰富、utf8mb4 完整支持中文
缓存 Redis 7 连续天数缓存、排行榜、会话管理
认证 JWT (golang-jwt/v5) 无状态、多端共享、7 天有效期
密码哈希 bcrypt (cost=12) 安全强度高,Go 标准库支持
前端 Web Next.js + App Router SSR / SSG 支持、良好的 SEO、React 生态
移动端 React Native 跨平台、与 Web 共享业务逻辑
小程序 原生 / Taro 微信生态,按需选择

3. 技术选型与版本

3.1 后端依赖

包名 用途 版本
github.com/gin-gonic/gin HTTP 框架 v1.10+
gorm.io/gorm ORM v1.25+
gorm.io/driver/mysql MySQL 驱动 v1.5+
github.com/golang-jwt/jwt/v5 JWT 认证 v5.2+
github.com/joho/godotenv .env 加载 v1.5+
golang.org/x/crypto bcrypt 密码哈希 v0.23+
github.com/go-playground/validator/v10 请求校验 v10.20+
github.com/gin-contrib/cors 跨域 v1.7+
github.com/stretchr/testify 测试断言 v1.9+

3.2 开发环境

工具 版本要求
Go 1.22+
MySQL 8.0+
Redis 7.x
Docker 24.x + Docker Compose
Node.js 18+(前端构建)

4. 模块设计

4.1 模块总览

server/internal/ ├── config/ 配置加载 —— 从环境变量 + .env 读取 ├── database/ 数据库初始化 —— GORM 连接 + AutoMigrate ├── models/ 数据模型 —— Go struct,映射到 9 张表 ├── middleware/ 中间件 —— JWT 认证 / CORS / 错误处理 ├── services/ 核心业务服务 │ ├── user_service.go 用户模块 │ ├── checkin_service.go 打卡模块 │ ├── points_service.go 积分与成就模块 │ └── social_service.go 社交模块 ├── handlers/ HTTP 处理器 │ ├── user_handler.go │ ├── checkin_handler.go │ └── social_handler.go └── router/ 路由注册——统一管理所有 API 路由

4.2 用户模块(User

职责:用户注册/登录、个人资料管理、账号注销

服务接口

方法 说明
RegisterByPhone(phone) 手机号注册
GetByPhone(phone) 手机号查找用户
GetByID(id) 按 ID 获取用户
UpdateProfile(id, updates) 更新资料(昵称/头像/签名/隐私)
DeleteAccount(id) 注销账号(清除敏感信息)

隐私级别:1=公开、2=仅好友可见、3=仅自己可见

账号注销流程

  1. 用户发起注销请求
  2. 服务端清除手机号、昵称、头像等敏感字段
  3. 保留用户 ID 和关联的打卡记录(用于统计)
  4. 返回注销成功

4.3 打卡模块(CheckIn

核心数据流

用户创建打卡项 → 每日打卡 → 生成打卡记录 → 计算连续天数 → 发放积分 → 检查成就

打卡项状态机

创建 │ ▼ ┌────────┐ 暂停 ┌────────┐ 恢复 ┌────────┐ │ active │───────→│ paused │───────→│ active │ └───┬────┘ └────────┘ └────┬───┘ │ 归档 │ 归档 ▼ ▼ ┌──────────┐ 软删除 ┌──────────┐ │ archived │─────────────→│ deleted │ └──────────┘ └──────────┘

连续天数算法(时区感知):

  1. 获取指定打卡项的所有记录,按日期降序排列
  2. 检查最近一次打卡是否在 48 小时内
  3. 从最近一天开始向前遍历,相邻日期差为 24 小时则累加
  4. 遇到断签(日期差 > 24 小时)则停止
  5. 以 Asia/Shanghai 时区计算,非 UTC

补卡规则

  • 仅允许补签最近 7 天的缺失记录
  • 每月前 3 次免费
  • 超出部分消耗 5 积分/次
  • 补卡记录标记为 makeup 状态

4.4 积分与成就模块(Points

积分系统

事件 积分值 限制
每日打卡 +1 每日每项 1 次
连续 7 天 +5 达到时一次性
连续 30 天 +20 达到时一次性
目标完成 +10
分享动态 +2 每日上限 3 次
评论 +1 每日上限 5 次
邀请注册 +15 每月上限 5 人

成就系统

  • 10 个预定义成就徽章,3 种稀有度(铜/银/金)
  • 成就初始化在服务启动时通过 InitAchievements() 执行
  • 用户达成条件后调用 UnlockAchievement() 解锁
  • 解锁后发送系统通知

4.5 社交模块(Social

好友关系模型:双向确认机制

请求方 → 发送请求 → 待对方接受 → 建立双向好友 → 可选拒绝

动态广场

  • 动态发布时 privacy=1(公开)才会出现在广场
  • 默认按时间倒序排列
  • Likes 和 Comments 字段用计数器实现(减少 JOIN)

小组模型

  • 创建者自动成为管理员
  • 支持公开加入和私密审核(v1.0 简化处理)
  • 小组有成员人数上限(默认 50 人)

5. 安全设计

5.1 认证机制

机制 实现
令牌 JWT (HS256)7 天有效期
密码存储 bcryptcost=12
令牌传递 HTTP Header: Authorization: Bearer
公开路由 仅 /api/auth/* 和 /health 免认证

5.2 数据安全

安全措施 说明
隐私数据保护 服务层根据 privacy 字段过滤查询
环境变量 敏感信息(数据库、JWT 密钥)通过环境变量注入
.env 禁止提交 .env* 在 .gitignore 中,仅提交 .env.example
账号注销 清除手机号等个人敏感信息

5.3 API 安全

措施 说明
统一认证中间件 所有非公开路由默认需认证
请求校验 使用 ShouldBindJSON + validator 标签
统一响应格式 ApiResponse{Code, Message, Data}
CORS 允许跨域请求,生产环境限制来源

6. 性能设计

6.1 性能目标

指标 目标
API 响应时间(P95 ≤ 200ms
打卡操作端到端 ≤ 500ms
日历视图加载 ≤ 800ms
首页加载 ≤ 1s
并发支持 1000 QPS

6.2 缓存策略

数据 缓存位置 策略
连续天数 Redis 打卡时更新,失效时从 DB 重建
排行榜 Redis Sorted Set 定时计算后写入
JWT 黑名单 Redis TTL 与 Token 有效期一致

6.3 数据库优化

策略 说明
索引 user_id、item_id、check_date 建索引
分页 动态广场使用 Offset + Limit
连接池 GORM 默认连接池,生产环境调整最大连接数
查询优化 避免 N+1,使用 Preload 预加载关联

7. 错误处理规范

7.1 统一响应格式

json { "code": 0, "message": "ok", "data": { ... } }

7.2 错误码规范

HTTP 状态 code 说明
200 0 成功
400 400 请求参数错误
401 401 未认证或令牌无效
404 404 资源不存在
409 409 资源冲突(如手机号已注册)
500 500 服务器内部错误

7.3 错误处理流程

请求 → 中间件检查认证 → 处理器校验参数 → 服务层执行业务逻辑 ↓ ┌────────┐ │ 成功? │ └───┬────┘ │ ┌───────────────────┼───────────────────┐ ▼ ▼ ▼ Success(c, data) Error(c, status, msg) c.Error(err)


8. 日志与监控

8.1 日志规范

级别 使用场景
INFO 请求开始/结束、用户注册、打卡成功
WARN 参数校验失败、补卡近上限、查询慢
ERROR 数据库异常、JWT 解析失败、panic

8.2 Health Check

  • 路由:GET /health
  • 返回:{"status": "ok"}
  • 可用于 Kubernetes Liveness/Readiness Probe

8.3 监控指标(规划中)

指标 说明
QPS 每秒请求数
P50/P95/P99 响应时间分布
错误率 5xx 占比
数据库连接数 活跃连接数
Redis 命中率 缓存命中率

附录 A:项目结构总览

F:\myProject\InchStep\ ├── docs/ # 设计文档 │ ├── 寸进_InchStep_详细需求说明书.md │ ├── 系统设计说明书.md # 本文件 │ ├── API设计文档.md │ └── 数据库设计文档.md ├── server/ # 后端 APIGo + Gin + GORM │ ├── cmd/api/main.go # 入口 │ ├── internal/ │ │ ├── config/ # 配置加载 │ │ ├── database/ # 数据库初始化 │ │ ├── models/ # 数据模型(9 张表) │ │ ├── middleware/ # JWT / CORS / 错误处理 │ │ ├── services/ # 4 个核心服务 │ │ ├── handlers/ # HTTP 处理器 │ │ └── router/ # 路由注册 │ ├── go.mod / go.sum │ ├── Dockerfile │ └── .env.example ├── shared/ # 三端共享代码 ├── web/ # Web 端(Next.js ├── mobile/ # 移动端 AppReact Native ├── miniapp/ # 微信小程序 ├── admin/ # 管理后台(React ├── docker/docker-compose.yml # Docker 编排 └── scripts/ # 项目工具脚本

附录 B:版本规划

版本 后端重点 前端重点
v1.0 MVP 用户 + 打卡 + 基础统计 API 三端同步上线,打卡核心流程
v1.1 社交 API(好友/动态/排行榜) 动态广场、排行榜 UI
v1.2 小组 API、对战 API 小组详情、对战界面
v1.3 成就系统、月度报告 成就墙、报告页面