项目地址

https://github.com/LoveLosita/OnlineMall

到上传此文为止已经有21个commit,代码行数达到3200行。

下面是readme文件,水字数(后续不会在这里更新,最新的请移步github)。

1.项目功能(目前版本1.4.0Beta

本项目类似⼀个商品网站,可以实现以下功能:

  • [X] 用户的注册与登录
  • [X] 加密存储用户密码
  • [X] 添加商品分类
  • [X] 修改用户的信息
  • [X] 查询商品
  • [X] 查看商品详情
  • [X] 查看分类下的商品
  • [X] 给商品进行评论(评论的增删查)
  • [X] 商品加入购物车
  • [X] 获取购物车所有商品
  • [X] 搜索购物车中的商品
  • [X] 初级下单(向前端返回⼀个订单order)
  • [ ] 进阶下单(真正影响商品库存并且处理并发)
  • [ ] 终极下单(在进阶下单的基础上模拟微信/支付宝的支付回调等)
  • [X] 嵌套评论
  • [X] 匿名评论
  • [X] 浏览的商品的历史记录
  • [X] 商家和管理员的出现(可以自由增删商品)
  • [ ] 与AI助手的聊天(使用ChatAI接口)
  • [ ] 加入验证码登录的操作(成本有限,可能会研究如何实现2FA)
  • [ ] 使用缓存(Redis缓存)
  • [ ] 设计⼀套热度算法,使得能让该用户常看的商品分类下的商品出现在首页
  • [ ] 用户可以与客服进行聊天(可能会用Python实现商家、管理员和用户的客户端,如果有时间的话)
  • [ ] 部署到自己的服务器上,并且可以访问
  • [ ] 考虑安全性(xxs,sql注入,csrf等。sql注入目前是已经可以防御了,因为sql语句中使用的是占位符)
  • [ ] 你任何想加的功能(咕咕咕)

2.项目结构

2.1.文件结构图

OnlineMall
│
├── api                  // 存放所有的 API 接口定义
│   ├── auth.go           // 用户认证相关接口
│   ├── cart.go           // 购物车相关接口
│   ├── categories.go     // 商品分类相关接口
│   ├── order.go          // 订单管理相关接口
│   ├── product.go        // 商品管理相关接口
│   ├── review.go         // 商品评论相关接口
│   └── user.go           // 用户管理相关接口
│
├── auth                 // 负责身份认证的功能
│   ├── check_permission.go  // 检查用户权限
│   └── jwt_generator.go     // 生成和解析 JWT
│
├── cmd                  // 存放应用启动和初始化的逻辑
│   └── start.go           // 启动应用并初始化服务
│
├── dao                  // 数据库交互层
│   ├── db_connection.go  // 负责连接数据库事宜
│   ├── cart.go           // 购物车数据操作
│   ├── categories.go     // 商品分类数据操作
│   ├── order.go          // 订单数据操作
│   ├── product.go        // 商品数据操作
│   ├── review.go         // 商品评论数据操作
│   └── user.go           // 用户数据操作
│
├── middleware           // 存放中间件,如 token 校验
│   └── token_handler.go    // 处理 token 校验逻辑
│
├── model                // 存放数据模型
│   ├── auth.go           // 用户认证模型
│   ├── cart.go           // 购物车模型
│   ├── order.go          // 订单模型
│   ├── products.go       // 商品模型
│   ├── review.go         // 商品评论模型
│   └── user.go           // 用户模型
│
├── respond              // 返回响应的处理
│   └── responses.go       // 定义统一的响应格式
│
├── routers              // 存放路由配置
│   └── router.go          // 配置所有 API 路由
│
├── service              // 业务逻辑层
│   ├── auth.go           // 用户认证相关业务逻辑
│   ├── cart.go           // 购物车相关业务逻辑
│   ├── categories.go     // 商品分类相关业务逻辑
│   ├── order.go          // 订单相关业务逻辑
│   ├── product.go        // 商品相关业务逻辑
│   ├── review.go         // 商品评论相关业务逻辑
│   └── user.go           // 用户相关业务逻辑
│
├── utils                // 工具函数
│   ├── if_in.go           // 判断元素是否在序列中的工具函数集
│   └── pwd_encryption.go  // 密码加密工具
│
├── go.mod               // Go Modules 配置文件
├── main.go              // 项目的入口文件,在此启动项目
└── readme.md            // 项目的 README 文件,即本文件

2.2.目录详细说明:

  1. api:该文件夹包含了与 API 相关的接口定义,分别涉及到用户认证、购物车管理、商品分类、商品管理、订单处理和评论功能。每个文件对应一个功能模块的 API。
  2. auth:处理用户认证相关的逻辑,主要负责 JWT 的生成与验证,确保用户身份的合法性。
  3. cmd:包含应用的启动逻辑,start.go 是应用启动和初始化的入口,负责加载配置并启动服务。
  4. dao:数据访问层,包含与数据库的交互操作,处理数据的增删改查。例如,cart.go 文件负责与购物车相关的数据交互,order.go 文件负责订单相关的数据操作等。
  5. middleware:中间件层,通常用于处理请求前后需要的操作,如验证 token。
  6. model:数据模型定义文件,通常与数据库中的表结构相关联。每个文件对应一个模块的数据模型,如 cart.go 定义了购物车的结构和属性,products.go 定义了商品的结构等。
  7. respond:统一的响应格式处理模块,确保 API 返回的数据结构一致,便于前端处理。
  8. routers:定义各个 API 路由及其对应的处理函数,管理请求路径和处理逻辑。
  9. service:业务逻辑层,封装各个功能模块的具体业务操作,提供更高层次的功能接口。例如,cart.go 文件在服务层进行购物车相关的操作。
  10. utils:存放工具类函数,如判断条件和密码加密等。
  11. go.mod:Go Modules 配置文件,指定项目依赖的外部包和版本。
  12. main.go:项目的入口文件,启动应用并进行初始化配置。
  13. readme.md:项目的README 文件,提供项目的基本信息、使用说明和技术栈等。

3.状态码的定义

状态码HTTP状态码描述原因解决方案
20000200成功--
40001401用户名错误登录时,传入的用户名参数错误,在数据库中找不到匹配的用户传入正确的用户名
40002401密码错误登录时,传入的密码参数错误,无法和数据库中现存的匹配传入正确的密码
40003400用户名无效注册时,传入的用户名在数据库中已经存在了传入唯一的用户名
40004400缺少参数传入的参数数量小于所要求的数量传入足够参数
40005400参数类型错误传入的参数类型错误,导致无法和结构体绑定传入正确参数
40006400参数过长传入的某个参数长度过于长缩短过长参数的长度
40007400用户名或密码错误传入的用户名或者密码错误传入正确的用户名或密码
40008400性别错误传入的性别不属于("male","female","other")中的一种传入其中的一种
40009401缺少tokenHeader中未填写JWT key在Header中填写
40010401jwt token签名方法无效JWT key格式错误传入正确的JWT token
40011401无效tokenJWT token无效传入正确的JWT token
40012401无效声明JWT token的声明无效传入正确的JWT token
40013400传入的用户id无效在执行通过id查找用户信息时没找到用户传入正确的用户id
40014401权限不够用户不是管理员或者店主让管理员或者店主来执行此操作
40015404分类不存在在添加商品的时候,没有找到分类id所对应的分类传入正确的分类id
40016400分类名称已经存在在添加分类时,填写了一个重复的分类名称传入不和现有分类重复的分类名称
40017404商品不存在尝试通过ID找商品,但是不存在该商品传入存在商品的ID
40018404找不到商品通过关键字搜索无法找到商品传入存在商品的关键字
40019404商品列表为空在显示全部商品/显示某个分类的商品时,商品列表为空前者,请先添加商品再进行其他操作;后者,请传入正确的分类id
40020401Refresh Token无效在尝试通过刷新令牌接口刷新Access Token时,传入了无效的Refresh Token传入有效的Refresh Token。如果Refresh Token也过期了,就重新登录
40021400商品已经在购物车中在尝试将一定数量的某商品加入购物车时,购物车里面已经有相同数量的同一个商品如果是想更新数量,请传入数量不同的该商品;否则就换个商品
40022400数量太大在尝试下单或者将商品加入购物车时,传入的数量超过了999请传入小于999的数量
50001500订单不存在在检查该用户是否购买了此商品时,订单表单和商品表单不匹配,属于内部错误-
40024400用户没有购买过此商品在用户尝试评论该商品时,发现用户没购买过此商品请购买此商品后再评论
40025400用户已经评论过了在用户尝试评论该商品时,系统发现用户已经评论过了请勿重复评论
40026400用户打分超出范围用户的打分超出了1-5分的范围请将对商品的分数打在此范围内
40027400用户评论字数过长用户在评论商品时,评论字数过长请用户缩短评论字数
40028400父评论不存在在用户尝试回复评论时,传入的父评论id不存在请传入存在的父评论id
40029404购物车为空在用户请求展示购物车全部商品时,购物车中无商品请先添加商品再展示
40030404商品评论为空在用户尝试查看某商品下评论时,评论为空请先评论再获取评论
40031404找不到评论在商家通过关键词搜索某商品下的评论时,没有找到符合要求的评论请更换关键词
40032404评论不存在在传入评论id需要进行查询/删除操作时,没有找到该id的评论请传入正确的评论id

4.通用错误的返回示例

项目返回的一些错误是通用性的,所以我仅仅在项目初期的apifox接口文档编写中保存了其示例,在后期便没有再保存示例。在此,我将这些错误的示例列出,原因请自行查阅上方表格:

4.1.未登录

{
    "status": "40009",
    "info": "missing token"
}

4.2.jwt token签名方法无效

{
    "status": "40010",
    "info": "invalid signing method"
}

4.3.无效Token/Token过期

{
    "status": "40011",
    "info": "invalid token"
}

4.4.Token的声明(claim)无效

{
    "status": "40012",
    "info": "invalid claims"
}

4.5.权限不足

{
    "status": "40014",
    "info": "unauthorized"
}

4.6.缺少参数

{
    "status": "40004",
    "info": "missing param"
}

4.7.参数类型错误

{
    "status": "40005",
    "info": "wrong param type"
}

4.8.参数过长

{
    "status": "40006",
    "info": "param too long"
}

5.启动项目

确保本地有最新版本的go环境,并且项目已经被完整的下载到了本地。

首先,在OnlineMall项目主文件夹下的终端里执行:go mod tidy来下载和整理依赖。

然后再执行go run main.go来启动项目。

最后修改:2025 年 01 月 26 日
如果觉得我的文章对你有用,请随意赞赏