本项目是一个ToC的商城项目,参考了原项目CocaineCong/gin-mall。
我在其基础上做出了很大改动,从项目结构到数据库设计再到业务逻辑都重构并完善了一遍。
目前已基本完成并通过了一般测试,如需学习建议循序渐进,参考commit记录。
- gin、gorm、mysql、redis、swag、elasticsearch、jwt、oss、kafka、viper、zap、go-mail、validator
参考config\config.yaml.example配置格式,新建一个自己的config\config.yaml文件,所需环境与配置文件中的配置项对应,其中mysql读写分离的配置项可暂时设置为同一个数据库,如果需要也可单独配置主从数据库。
不必一次全部部署出来,按照我的commit记录来看,最开始只有一些最基本的配置。
- 认证模块
- 登录
- 注册
- 用户模块
- 查看/更新用户信息
- 更新密码
- 上传头像
- 绑定邮箱
- 关注/取关用户
- 获取粉丝/关注列表
- 商品模块
- 商品分类
- 商品列表(分页)
- 商品详情
- 搜索商品
- 收藏模块
- 收藏列表
- 收藏/取消收藏
- 地址模块
- 用户地址列表
- 地址详情信息
- 添加/更新/删除地址
- 订单模块
- 订单列表
- 订单详情
- 创建/删除订单
- viper实时监听配置文件变化
- mysql配合gorm dbresolver实现读写分离
- 通过gorm的callback回调函数实现记录慢查询sql日志和限流器
- 在后端通过cors解决跨域问题
- jwt双token认证保证安全性的同时实现无感刷新
- 优雅关机
- 通过es搭配ik分词器对商品进行全文搜索
- 对用户头像和商品图片等上传的文件适配了本地存储和oss存储
- 使用swag对所有接口编写了api文档
- 使用bcrypt对密码进行加密和验证,aes对金额进行加密和解密
- 给用户发送邮件进行绑定确认
- 将用户购物车数据缓存在redis中并保证了数据库和缓存的最终一致性
- 使用消息队列对订单数据进行异步处理
- 支付功能