应用市场系统 V1.0 后端功能分析总结

应用市场系统V1.0后端功能分析总结

技术栈:Go + Gin + GORM + MySQL + JWT,整体分层:model(数据模型) → repository(数据访问层) → service(业务逻辑层) → handler(控制器) → middleware(中间件),配套静态文件服务、APK解析、统一REST响应规范。

一、账号与鉴权体系

  1. 两种角色admin(管理员)user(普通用户),两张独立数据表,注册做跨表用户名查重,防止普通用户注册admin用户名。
  2. 注册登录
    • 普通用户开放注册,支持选填邮箱;
    • 统一登录接口,自动区分user/admin角色;
    • JWT鉴权,携带角色、用户ID、用户名、token_version令牌版本号
  3. 令牌失效机制 :修改密码 / 管理员重置密码时,token_version自增,旧token直接失效,强制重新登录。
  4. 鉴权中间件
    • JWTAuth:仅允许admin访问;
    • LoginAuth:admin、普通登录用户均可访问。
  5. 账户管理
    • 用户修改本人密码;管理员可重置任意账号密码;
    • 用户查看/修改个人资料(邮箱、个人简介,admin无邮箱);
    • 用户注销账户:确认后删除用户、关联全部应用、评论、下载、申诉记录,token失效;
  6. 上传权限限制+申诉
    • admin可以限制普通用户上传权限;
    • 被限制用户可以提交申诉,管理员审批申诉:通过则解除限制,拒绝维持限制;
    • 同一个用户只能有一条待审批申诉,拒绝后可以重新提交申诉。
  7. 管理员初始化:程序启动时,admin表为空自动读取配置创建超级管理员账号。

二、应用生命周期核心功能

审核机制:普通用户上传应用默认draft草稿,需要手动申请上架进入pending待审核,管理员审核通过才可以上架;拒绝则回到拒绝状态,可以修改后重新申请。管理员上传应用直接可以管理上下架。

  1. 应用上传
    • admin上传应用;登录普通用户上传应用,普通用户包名校重,管理员豁免;
    • 上传APK文件,后端自动解析APK包名、versionCode、versionName,自动提取应用图标;
    • 文件大小限制,上传失败自动清理已经写入磁盘的apk、图标孤儿文件。
  2. 版本更新
    • 应用拥有者 / admin可以更新APK新版本;
    • 校验versionCode不能重复;
    • 重审逻辑:如果应用已经审核通过,更新版本后自动下架,变为待审核,需要管理员重新审核后才能上架。
  3. 应用查询
    • 公开市场接口:游客无需登录,只看已经上架的应用;支持关键词搜索、按上传者、标签、省市过滤;
    • 管理员后台:可以查询全部应用,包含下架应用;
    • 我的应用列表:登录用户查看自己上传的所有应用(草稿、待审核、拒绝、上架全部可见)。
  4. 应用信息编辑:应用拥有者/admin可以修改应用名称、简介、分类标签、省市信息。
  5. 上下架管理
    • 用户只能执行下架;上架必须走申请审核流程;
    • admin可以手动上下架,上架操作强制校验该应用必须审核通过。
  6. 应用审核流程
    • 用户提交申请上架:状态变为pending待审核;
    • admin审核队列查看所有待审核应用;
    • 审核通过:自动上架;审核拒绝:下架,填写拒绝意见,用户可修改重提。
  7. 删除应用/删除用户
    • 删除应用:事务删除版本、评论、下载记录,同时删除磁盘上apk、图标静态文件;
    • 管理员删除用户:级联删除该用户所有应用、申诉数据。

三、下载、评论评分交互功能

  1. APK下载
    • 无需登录,访问下载接口;
    • 每次下载写入download_log下载记录表,记录版本ID、应用ID、设备标识;
    • 提供断点续传静态文件服务,支持HTTP‑Range,防路径穿越,处理apk/png/jpg MIME类型。
  2. 评论&评分
    • 游客/登录用户都可以提交评论;用户名留空为游客模式;
    • 支持跟评回复:顶级评论带1‑5评分,回复跟评不计入评分;
    • 校验父评论必须存在且属于同一个应用;
    • 实时聚合计算平均分、评论数量,跟评不参与评分统计;
    • 查询应用评论列表,同时返回平均分、评分人数。
  3. 统计能力
    • 站点统计接口:无需鉴权,返回上架应用总数、全站总下载量;
    • PV访问计数:每次调用统计接口PV自增;
    • 应用列表/详情批量聚合下载次数、平均分,避免N+1数据库查询。

四、分类标签管理(新模块Tag)

  1. 标签审核规则
    • admin创建标签直接审核通过;普通用户创建标签进入待审核pending;
    • 标签名称全局唯一;状态:pending待审核 / approved已通过 / rejected已拒绝
  2. 接口能力
    • 公开接口:获取所有已经审核通过的标签,用于前端筛选、上传应用选择标签;
    • admin管理:查看全部标签、审核通过/拒绝标签、重命名标签、删除标签;
  3. 联动业务
    • 应用可以绑定标签ID;
    • 标签重命名自动同步所有绑定该标签应用的category快照
    • 删除标签:先清空所有应用对该标签的外键引用,再删除标签,避免悬空数据库引用;
    • 用户上传应用时只能选择状态为approved的标签。

五、跨域、静态资源、Web控制台

  1. CORS跨域中间件,处理OPTIONS预检请求,适配web、Flutter客户端跨域访问。
  2. 自定义静态处理器 :不再使用gin默认static,自行实现/static/*filepath,支持断点续传、路径防穿越。
  3. Web单页控制台托管,根路径返回web/index.html SPA页面。

六、数据库相关能力

  1. GORM自动迁移建表,启动自动创建数据库;
  2. 数据表清单: admin管理员、user普通用户、app_info应用主表、app_version应用版本、download_log下载记录、comment评论、site_stat站点PV统计、tag标签、upload_appeal上传申诉表。
  3. 存量数据回填:启动自动把没有上传者信息的旧应用归属给默认管理员,保证数据完整性。
  4. 事务处理:创建应用+版本、删除应用相关数据等使用数据库事务保证一致性。

七、接口规范

  1. 统一响应格式 ,http状态码统一200,业务code:0成功,1通用失败,401鉴权失败,msg提示,data承载数据。
  2. REST接口分组:
  • /admin/api/*:旧版管理后台接口;
  • /api/v1/*:新版接口,区分公开接口、登录用户接口、仅管理员接口。
  1. 完整接口文档REST_API.md,定义入参出参,支持curl测试示例。

八、工具层能力util包

  1. JWT生成、解析、校验;
  2. bcrypt密码哈希;
  3. APK解析(包名、版本号)、从apk提取图标;
  4. 文件上传保存,生成随机文件名,文件大小获取;
  5. 统一http响应封装。

九、部署相关

  • 支持docker/docker‑compose部署;
  • yaml配置文件:端口、mysql连接、jwt密钥、上传文件大小路径、admin默认账号密码;
  • 单元测试套件,覆盖鉴权、应用生命周期、评论下载、用户管理等84个测试用例。

业务整体流程简要梳理

  1. 管理员:登录 → 管理用户、审核标签、审核应用、管理全部应用、处理用户申诉、重置密码、限制用户上传权限。
  2. 普通用户:注册登录 → 上传应用(草稿)→ 申请上架等待admin审核 → 审核通过后市场可见;更新版本会触发重审;可以提交申诉解除上传限制;可注销账号。
  3. 游客:浏览市场、查看应用详情、下载apk、提交评论评分、查看公开标签。
相关推荐
码农研究僧2 年前
原生鸿蒙的竞争力到底如何?
华为·harmonyos·应用市场·原生鸿蒙·竞争力
北漂的老猿2 年前
一个软件分发和下载的网站源码,带多套模板
软件分发·应用市场
命运之手2 年前
【Android】安卓打开指定厂商的应用市场
android·应用市场·market·渠道
北漂的老猿3 年前
Uniapp软件库全新带勋章功能(包含前后端源码)
uni-app·软件分发·软件库·应用市场