大项目日记 | 青训营笔记

64 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天

项目进展

距离大项目提交仅剩一周左右的时间,目前所有要求的接口均已实现,在不断地优化项目功能及项目架构中

项目架构

今天对项目整体进行了梳理与总结,将一部分公用的模块抽取了出来,提高了代码的复用率,并且参照在青训营前期课程中学习和了解到的 GoLang 的规范项目架构,对我这次青训营大项目进行了整理,所有的模块构成如下图所示:

image.png

  1. cache1 存储与Redis和缓存有关的代码,主要用于提高点赞和关注的速度
  2. controller 主要存储各模块的controller层,解析JSON信息并校验其是否合法,并将其传入service层进行吊用
  3. models 实体层,主要用存储结构体及其相应的方法及数据库增删改查操作
  4. pkg 公用返回模块以及常用错位返回信息(Statusmsg)
  5. public 用于存储接收到的video、cover、以及用户图像
  6. routers 存储路由代码
  7. server 存储server层代码,接受controller层穿入得参数,传递给尸体层进行增删改查操作
  8. 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

  1. Id:主键
  2. FromUserId:发送者Id
  3. ToUserId:接受者Id
  4. Content:消息内容
  5. Optional:创建时间

同时,由于一个用户可能发送出多条消息,因此, Message 与 UserInfo 之间是一种多对一的关系

对于两个用户的聊天记录,我们可以通过在数据库中同时查出所有的满足 FromUserId = ? AND ToUserId = ? 的 Message 信息并按 CreatedAt 升序排列即可