这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
项目进展
距离大项目提交仅剩一周左右的时间,目前所有要求的接口均已实现,在不断地优化项目功能及项目架构中
项目架构
今天对项目整体进行了梳理与总结,将一部分公用的模块抽取了出来,提高了代码的复用率,并且参照在青训营前期课程中学习和了解到的 GoLang 的规范项目架构,对我这次青训营大项目进行了整理,所有的模块构成如下图所示:
- cache1 存储与Redis和缓存有关的代码,主要用于提高点赞和关注的速度
- controller 主要存储各模块的controller层,解析JSON信息并校验其是否合法,并将其传入service层进行吊用
- models 实体层,主要用存储结构体及其相应的方法及数据库增删改查操作
- pkg 公用返回模块以及常用错位返回信息(Statusmsg)
- public 用于存储接收到的video、cover、以及用户图像
- routers 存储路由代码
- server 存储server层代码,接受controller层穿入得参数,传递给尸体层进行增删改查操作
- util 工具类,存储包括截图、生成url、生成id的雪花算法等工具代码
消息记录列表实现思路
消息记录列表作为这次青训营的一个重要拓展接口,对此,我提出了如下的实现思路
type Message struct {
Id int64 `json:"id"`
FromUserId int64 `json:"to_user_id"`
ToUserId int64 `json:"from_user_id"`
Content int64 `json:"content"`
Optional string `json:"create_time"`
Users []*UserInfo `json:"-"`
CreatedAt time.Time `json:"-"`
}
Message
- Id:主键
- FromUserId:发送者Id
- ToUserId:接受者Id
- Content:消息内容
- Optional:创建时间
同时,由于一个用户可能发送出多条消息,因此, Message 与 UserInfo 之间是一种多对一的关系
对于两个用户的聊天记录,我们可以通过在数据库中同时查出所有的满足 FromUserId = ? AND ToUserId = ? 的 Message 信息并按 CreatedAt 升序排列即可