这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。
青训营学习了几天,前面节奏有些快,没课后理理前面的知识,主要是针对模拟发布话题和帖子项目。从需求出发到最终实现。
需求设计
针对一个社区页面服务,需要能够显示话题和帖子,用户能够查看及发布新的帖子等功能。
- 展示话题(标题,文字描述)和回帖列表;
- 仅实现服务器,数据存放在文件中
- 扩展功能:完成帖子发布,保证帖子ID唯一性,考虑并发问题
需求用例
查看、发布等
话题与帖子的关系
帖子,其中parentId为话题Id
type Post struct {
Id int64 `json:"id"`
ParentId int64 `json:"parent_id"`
Content string `json:"content"`
CreateTime int64 `json:"create_time"`
}
话题,话题对应帖子为一对多模式
type Topic struct {
Id int64 `json:"id"`
Title string `json:"title"`
Content string `json:"content"`
CreateTime int64 `json:"create_time"`
}
分层结构
- Reposity数据层:获取文件中话题和帖子的数据
- Service逻辑层:调用数据层接口
- Controller视图层:将将数据封装给服务端调用
服务端server.go:初始化数据,提供Get和Post接口;调用视图层接口
各个模块实现
从上层到底层
1. server
该部分使用了Go的Gin框架; 其中:
- GET为获取已有的topic和post
- POST分为两部分,分别为添加topic和post;
可见起调用了controller层的方法。
2. Controller视图层
- 初始化页面信息
- 创建话题
- 创建帖子
3. Service逻辑层
- 初始化页面信息
根据话题id获取post
- 创建话题
- 创建帖子 创建帖子的id使用了雪花算法,根据时间戳生成id [github.com/gitstliu/go…]
4. Repository数据层
- 定义Topic和Post结构
Topic:
Post
- 初始化页面信息
- 创建话题
通过长度获取话题的id。
- 创建帖子
定义在Post中的函数
运行结果
- GET git bash输入命令: curl --location --request GET 'http://127.0.0.1:8080/community/page/get/2'
- POST 创建帖子
git bash输入命令: curl -d 'topic_id=3' -d 'content=hello world' -X POST http://127.0.0.1:8080/community/post/do
创建话题
git bash输入命令:curl -d 'title=byte' -d 'content=xjj and xgg' -X POST http://127.0.0.1:8080/community/topic/do