应用市场系统V1.0后端功能分析总结
技术栈:Go + Gin + GORM + MySQL + JWT,整体分层:model(数据模型) → repository(数据访问层) → service(业务逻辑层) → handler(控制器) → middleware(中间件),配套静态文件服务、APK解析、统一REST响应规范。
一、账号与鉴权体系
- 两种角色:
admin(管理员)、user(普通用户),两张独立数据表,注册做跨表用户名查重,防止普通用户注册admin用户名。 - 注册登录
- 普通用户开放注册,支持选填邮箱;
- 统一登录接口,自动区分user/admin角色;
- JWT鉴权,携带角色、用户ID、用户名、token_version令牌版本号。
- 令牌失效机制:修改密码 / 管理员重置密码时,
token_version自增,旧token直接失效,强制重新登录。 - 鉴权中间件
JWTAuth:仅允许admin访问;LoginAuth:admin、普通登录用户均可访问。
- 账户管理
- 用户修改本人密码;管理员可重置任意账号密码;
- 用户查看/修改个人资料(邮箱、个人简介,admin无邮箱);
- 用户注销账户:确认后删除用户、关联全部应用、评论、下载、申诉记录,token失效;
- 上传权限限制+申诉
- admin可以限制普通用户上传权限;
- 被限制用户可以提交申诉,管理员审批申诉:通过则解除限制,拒绝维持限制;
- 同一个用户只能有一条待审批申诉,拒绝后可以重新提交申诉。
- 管理员初始化:程序启动时,admin表为空自动读取配置创建超级管理员账号。
二、应用生命周期核心功能
审核机制:普通用户上传应用默认
draft草稿,需要手动申请上架进入pending待审核,管理员审核通过才可以上架;拒绝则回到拒绝状态,可以修改后重新申请。管理员上传应用直接可以管理上下架。
- 应用上传
- admin上传应用;登录普通用户上传应用,普通用户包名校重,管理员豁免;
- 上传APK文件,后端自动解析APK包名、versionCode、versionName,自动提取应用图标;
- 文件大小限制,上传失败自动清理已经写入磁盘的apk、图标孤儿文件。
- 版本更新
- 应用拥有者 / admin可以更新APK新版本;
- 校验
versionCode不能重复; - 重审逻辑:如果应用已经审核通过,更新版本后自动下架,变为待审核,需要管理员重新审核后才能上架。
- 应用查询
- 公开市场接口:游客无需登录,只看已经上架的应用;支持关键词搜索、按上传者、标签、省市过滤;
- 管理员后台:可以查询全部应用,包含下架应用;
- 我的应用列表:登录用户查看自己上传的所有应用(草稿、待审核、拒绝、上架全部可见)。
- 应用信息编辑:应用拥有者/admin可以修改应用名称、简介、分类标签、省市信息。
- 上下架管理
- 用户只能执行下架;上架必须走申请审核流程;
- admin可以手动上下架,上架操作强制校验该应用必须审核通过。
- 应用审核流程
- 用户提交申请上架:状态变为pending待审核;
- admin审核队列查看所有待审核应用;
- 审核通过:自动上架;审核拒绝:下架,填写拒绝意见,用户可修改重提。
- 删除应用/删除用户
- 删除应用:事务删除版本、评论、下载记录,同时删除磁盘上apk、图标静态文件;
- 管理员删除用户:级联删除该用户所有应用、申诉数据。
三、下载、评论评分交互功能
- APK下载
- 无需登录,访问下载接口;
- 每次下载写入
download_log下载记录表,记录版本ID、应用ID、设备标识; - 提供断点续传静态文件服务,支持
HTTP‑Range,防路径穿越,处理apk/png/jpg MIME类型。
- 评论&评分
- 游客/登录用户都可以提交评论;用户名留空为游客模式;
- 支持跟评回复:顶级评论带1‑5评分,回复跟评不计入评分;
- 校验父评论必须存在且属于同一个应用;
- 实时聚合计算平均分、评论数量,跟评不参与评分统计;
- 查询应用评论列表,同时返回平均分、评分人数。
- 统计能力
- 站点统计接口:无需鉴权,返回上架应用总数、全站总下载量;
- PV访问计数:每次调用统计接口PV自增;
- 应用列表/详情批量聚合下载次数、平均分,避免N+1数据库查询。
四、分类标签管理(新模块Tag)
- 标签审核规则
- admin创建标签直接审核通过;普通用户创建标签进入待审核pending;
- 标签名称全局唯一;状态:
pending待审核 / approved已通过 / rejected已拒绝。
- 接口能力
- 公开接口:获取所有已经审核通过的标签,用于前端筛选、上传应用选择标签;
- admin管理:查看全部标签、审核通过/拒绝标签、重命名标签、删除标签;
- 联动业务
- 应用可以绑定标签ID;
- 标签重命名自动同步所有绑定该标签应用的category快照;
- 删除标签:先清空所有应用对该标签的外键引用,再删除标签,避免悬空数据库引用;
- 用户上传应用时只能选择状态为approved的标签。
五、跨域、静态资源、Web控制台
- CORS跨域中间件,处理OPTIONS预检请求,适配web、Flutter客户端跨域访问。
- 自定义静态处理器:不再使用gin默认static,自行实现
/static/*filepath,支持断点续传、路径防穿越。 - Web单页控制台托管,根路径返回web/index.html SPA页面。
六、数据库相关能力
- GORM自动迁移建表,启动自动创建数据库;
- 数据表清单:
admin管理员、user普通用户、app_info应用主表、app_version应用版本、download_log下载记录、comment评论、site_stat站点PV统计、tag标签、upload_appeal上传申诉表。 - 存量数据回填:启动自动把没有上传者信息的旧应用归属给默认管理员,保证数据完整性。
- 事务处理:创建应用+版本、删除应用相关数据等使用数据库事务保证一致性。
七、接口规范
- 统一响应格式,http状态码统一200,业务code:
0成功,1通用失败,401鉴权失败,msg提示,data承载数据。 - REST接口分组:
/admin/api/*:旧版管理后台接口;/api/v1/*:新版接口,区分公开接口、登录用户接口、仅管理员接口。
- 完整接口文档
REST_API.md,定义入参出参,支持curl测试示例。
八、工具层能力util包
- JWT生成、解析、校验;
- bcrypt密码哈希;
- APK解析(包名、版本号)、从apk提取图标;
- 文件上传保存,生成随机文件名,文件大小获取;
- 统一http响应封装。
九、部署相关
- 支持docker/docker‑compose部署;
- yaml配置文件:端口、mysql连接、jwt密钥、上传文件大小路径、admin默认账号密码;
- 单元测试套件,覆盖鉴权、应用生命周期、评论下载、用户管理等84个测试用例。
业务整体流程简要梳理
- 管理员:登录 → 管理用户、审核标签、审核应用、管理全部应用、处理用户申诉、重置密码、限制用户上传权限。
- 普通用户:注册登录 → 上传应用(草稿)→ 申请上架等待admin审核 → 审核通过后市场可见;更新版本会触发重审;可以提交申诉解除上传限制;可注销账号。
- 游客:浏览市场、查看应用详情、下载apk、提交评论评分、查看公开标签。


被折叠的 条评论
为什么被折叠?



