# loveserver **Repository Path**: wyblovecoding/loveserver ## Basic Information - **Project Name**: loveserver - **Description**: 誓言上链项目的后端代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-17 - **Last Updated**: 2022-02-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: Go语言, Gin ## README # loveserver ## 项目介绍 誓言上链的后端代码 该项目是从github上面下载的一个备忘录程序的后端代码改进而来 备忘录程序源码地址: https://github.com/ischaojie/gtodo ---- ## 技术介绍 * gin: web框架, 基于gin实现restfulAPI接口 * gorm: golang的ORM框架, 快速实现数据库操作(无需写sql语句) * MySQL: 数据存储, 基于mysql存储数据 * redis: 数据缓存 => 后期添加 * BSN fabric SDK =>BSN提供的区块链服务网络 * hyperledger fabric =>联盟链 ---- ## 代码结构 * config: 基于viper和fsnotify处理配置 * config.go: 封装跟配置文件相关的操作, 比如初始化配置文件、热加载配置文件等 * errno: 定义错误码 * code.go: 定义错误码的code和message * errno.go: 定义错误码的类和方法 * handler: 核心业务逻辑实现 * admin.go: 管理员模块核心业务逻辑 * advice.go: 意见模块核心业务逻辑 * auth.go: 用户模块核心业务逻辑 * handler.go: 各大核心业务逻辑的公共模块, 比如响应返回内容 * shield.go: 屏蔽词模块核心业务逻辑 * todo.go: 备忘录核心业务逻辑 * words.go: 誓言模块核心业务逻辑 * middleware: 中间件 * middleware.go * token.go: 基于jwt-go实现前后端鉴权 => 最后再加上去 * model: 基于gorm进行数据库操作 * admin.go: 管理员模块的数据库操作 * advice.go: 意见模块的数据库操作 * auth.go: 用户模块的数据库操作 * init.go: 数据库初始化及关闭数据库 * shield.go: 屏蔽词模块的数据库操作 * todo.go: 备忘录的数据库操作 * words.go: 誓言模块的数据库操作 * router: 后端接口路由 * admin.go: 管理员模块的路由 * advice.go: 意见模块的路由 * auth.go: 用户模块的路由 * init.go: 路由导入 * shield.go: 屏蔽词模块的路由 * todo.go: 原备忘录程序的路由 * words.go: 誓言模块的路由 * utils: 自己实现的工具包 * email.go: 实现邮件发送功能, 供handler模块中的业务逻辑调用 * password.go: 实现密码的加密和解密, 保证密码不明文存储 * config.yaml: 项目的配置文件 * go.mod: go mod文件 * main.go 项目主入口 * README: 项目说明 ---- ## 项目运行 ### 一、go get换国内源 把go get换成国内源可以让go get下载包的速度更快,具体方法自己百度 ### 二、go mod 简单了解 go mod 是 go官方为开发者提供的一个包管理工具 常用命令总结如下: (1)go mod download下载依赖包 (2)go mod init初始化依赖包 (3)go mod tidy拉取缺少的模块、移除不用的模块 (4)go mod verify验证依赖是否正确 (5)go mod vendor将依赖复制到vendor下 ### 三、创建数据库 => 数据库名为love 执行create database love; ### 四、运行 直接运行源码下的main.go即可 ---- ## 接口开发快速入门 ### model模块下写实体类对象及数据库操作 => 见/model/advice.go * 首先在具体的model文件写实体类对象 * 在model下的init.go中将该实体类对象绑定到数据库中 * gorm自动将实体类映射到数据库建表 * gorm自动添加主键id字段 * gorm会添加三个字段: created_at(标记创建时间)、updated_at(标记修改时间)、deleted_at(标记删除时间) * 根据gorm提供的方法写一些基本的接口(增删改查) => 具体sql语句gorm实现了 * DB.Self.Create: 创建一条新数据 * DB.Self.Delete: 删除一条数据 * DB.Self.Save: 更新一条数据 * DB.Self.First: 查询一条数据 * DB.Self.Table: 获取表对象 * DB.Self.Find: 查询所有数据 * gorm执行原生sql语句的方法: DB.Self.raw("原生sql语句") => 需要用的时候再详细查怎么用 ### handle模块下写业务逻辑 => 见/handle/advice.go * 首先在具体的handler文件中写实体类的列表包装对象, 用于给前端返回列表 * 然后就是下面具体的业务逻辑方法: * 参数读取: * 读取请求最后的id参数: c.Param("id") * 读取表单数据: c.PostForm("表单字段") * 数据库操作: 调用model模块下的方法 * 异常处理: 数据库操作时候要读取err并判断处理 * 返回响应: /handler/handler.go中实现了公共的响应方法 ### router模块下写路由方法 => 见/router/advice.go * 首先在某个路由文件中实现路由加载功能(设置路由) * 然后在init.go中调用上述路由加载功能即可 ---- ## 备忘录后端接口设计与描述 => 参考一下 * GET /api/todos 获取所有备忘录 * GET /api/todos/:id 根据id获取某个备忘录 * POST /api/todos 提交备忘录信息 * PUT /api/todos/:id 根据id更新备忘录信息 * DELETE /api/todos/:id 根据id删除备忘录信息 ---- ## 誓言上链后端接口设计与描述 ### 用户登陆注册相关接口 * POST /api/auth/login 登录 * POST /api/auth/register 注册 * GET /api/auth/info 获取用户信息 * PUT /api/auth/pwd 修改密码 ### 誓言相关接口 * GET /api/words 查询所有誓言信息 * GET /api/words/:id 根据id查询誓言详细信息 * POST /api/words/ 添加誓言 ### 屏蔽词相关接口 * GET /api/shield 查询所有屏蔽词信息 * GET /api/shield/:id 根据id查询屏蔽词信息 * POST /api/shield/ 添加屏蔽词 * PUT /api/shield/:id 根据id修改屏蔽词 * DELETE /api/shield/:id 根据id删除屏蔽词 ### 意见相关接口 * GET /api/advices 查询所有意见信息 * GET /api/advices/:id 根据id查询意见信息 * POST /api/advices/create 添加意见 * POST /api/advices/ 向意见发送者通过邮箱给出反馈 * DELETE /api/advices/:id 根据id删除意见 ### 管理员登陆相关接口 * POST /api/admin/login 登录 * GET /api/admin/info 获取管理员信息 * PUT /api/admin/pwd 修改密码 ---- ## 后端单元测试 => 稍微了解一下 ---- ## 后端核心业务(后期工作) => 基于目前的代码进行改进 ### 单组件拆分 => 核心业务1 * router模块(相当于C)划分: 不同的业务的路由分拆到不同的文件中 => 已经实现拆分, 具体内容见router模块下的todo和advice代码 * model模块(相当于M)划分: 不同的业务的数据库操作划分到不同的文件中 => 已经实现拆分, 具体内容见model模块下的todo和advice代码 * handler模块(相当于V)划分: 不同的业务的逻辑操作划分到不同的文件中 => 已经实现拆分, 具体内容见handler模块下的todo和advice代码 ### 数据库建模与gorm基本使用 => 核心业务2 * 数据库表设计: 有哪些字段、每个字段含义是什么、长度多少 * 多表查询: 查询业务中有无涉及到多表查询?如果涉及到,数据库表关系是什么样的? * gorm基本使用: 了解如何用gorm实现实体类到数据库的映射、了解如何使用gorm的基本接口(简单场景)、了解如何使用gorm写原生sql语句(复杂场景) * sql防注入: 了解gorm如何实现sql防注入 ### 中间件业务 => 核心业务3 * 缓存 * 浏览器跨域 * 安全设置 * 前后端登陆鉴权: 模仿商城管理后台系统实现, 源码见https://gitee.com/zhangyafeii/gin-shop-admin * 原理: 基于jwt-go实现jwt(JSON Web Token) ### 工具类及工具方法 => 核心业务4 * 邮件发送 * 密码加密解密 ### 用户登陆注册相关接口 => 核心业务5 * 用户注册接口:根据用户名、邮箱、密码三个字段信息注册用户 * 用户登录接口: 根据用户名或邮箱信息 以及 密码 两个字段信息登录 * 忘记密码修改密码接口: 用户忘记密码后根据邮箱修改密码 ### 誓言相关接口 => 核心业务6 * 誓言查询接口1: 根据誓言人查询某个誓言 * 誓言添加接口: 用户登录后输入誓言标题、誓言内容、誓言对象等信息提交誓言 ### 屏蔽词相关接口 => 核心业务7 * 屏蔽词查询接口1: 查询所有屏蔽词 * 屏蔽词查询接口2: 根据id查询某个屏蔽词 * 屏蔽词添加接口: 输入屏蔽词内容与屏蔽词类别添加屏蔽词 * 屏蔽词修改接口: 根据id修改屏蔽词 * 屏蔽词删除接口: 根据id删除屏蔽词 ### 意见相关接口 => 核心业务8 * 意见查询接口1: 查询所有意见 * 意见查询接口2: 根据id查询某条意见 * 意见添加接口: 输入意见标题、意见内容及邮箱添加意见 * 意见处理接口: 根据id处理意见(输入回信title与回信内容) * 意见删除接口: 根据id删除意见 ### 管理员登陆相关接口 => 核心业务9 * 管理员登录接口: 根据用户名或邮箱信息 以及 密码 两个字段信息登录 * 忘记密码修改密码接口: 管理员忘记密码后根据邮箱修改密码 ---- ## 代码贡献者 * [lmh](https://gitee.com/LeeMH647) * [wyb](https://gitee.com/wyb_woz)