Skip to content

上节梳理了需求,画了原型图,这节来设计下技术方案。

技术栈

前端部分还是 React + Antd Design,脚手架用 create-vite:

后端部分是 Nest + Prisma + Socket.io。

Prisma 是 ORM 框架,Socket.io 用来做 WebSocket 通信。

数据库是 mysql + redis,mysql 做持久化存储,redis 做缓存以及临时数据的存储。

用 minio 做 OSS 对象存储服务,存储上传的文件。

文档用 swagger 生成,部署用 docker compose + pm2。

数据库设计

然后来设计下数据库表:

需要这些表。

用户表存储用户信息,好友关系表就是存储用户和用户的关联关系。

好友申请表存储用户对用户的好友申请的记录。

聊天室表存储聊天室的信息。

用户所在聊天室表存储用户和聊天室的关联。

聊天记录表存储持久化的聊天记录。

收藏表存储用户收藏的聊天记录。

详细设计如下:

用户表 users:

字段名数据类型描述
idINT用户ID
usernameVARCHAR(50)用户名
passwordVARCHAR(50)密码
nick_nameVARCHAR(50)昵称
emailVARCHAR(50)邮箱
head_picVARCHAR(100)头像
create_timeDATETIME创建时间
update_timeDATETIME更新时间

好友关系表 friendship:

字段名数据类型描述
user1_idINT用户1
user2_idINT用户2

聊天室表 chatroom:

字段名数据类型描述
idINT聊天室ID
nameVARCHAR(50)群聊名
typeBOOLEAN类型(单聊、群聊)
create_timeDATETIME创建时间
update_timeDATETIME更新时间

用户所在聊天室表 user_chatroom:

字段名数据类型描述
user_idINT用户ID
chatroom_idINT聊天室ID

聊天记录表 chat_history:

字段名数据类型描述
idINT聊天记录ID
contentVARCHAR(500)聊天内容
chatroom_idINT聊天室ID
sender_idINT发送者ID
send_timeDATETIME发送时间
update_timeDATETIME更新时间

好友申请表 friend_request:

字段名数据类型描述
idINT好友申请id
from_user_idINT发送方
to_user_idINT待添加好友
reasonVARCHAR(100)添加理由
statusVARCHAR(10)状态(待处理、已同意、已拒绝)
create_timeDATETIME创建时间
update_timeDATETIME更新时间

收藏表 favorite:

字段名数据类型描述
idINTID
user_idINT用户 ID
chat_history_idINT聊天记录ID
create_timeDATETIME创建时间
update_timeDATETIME更新时间

然后划分下模块:

模块划分

首先是用户模块,实现登录、注册、信息修改的功能:

接口路径请求方式描述
/user/loginPOST用户登录
/user/registerPOST用户注册
/user/updatePOST用户个人信息修改
/user/update_passwordPOST用户修改密码

好友管理模块:

接口路径请求方式描述
/friendship/addPOST添加好友
/friendship/deleteDELETE删除好友
/friendship/listGET好友列表

聊天室管理模块:

接口路径请求方式描述
/chatroom/joinGET加入聊天室
/chatroom/exitGET退出聊天室
/chatroom/listGET聊天室列表
/chatroom/addPOST新建聊天室(单聊、群聊)

聊天模块:

接口路径请求方式描述
/chatWEBSOCKET聊天

收藏管理模块:

接口路径请求方式描述
/favorite/addGET添加收藏
/favorite/deleteDELETE删除收藏
/favorite/listGET收藏列表

好友请求管理模块:

接口路径请求方式描述
/friend_request/listGET好友请求列表
/friend_request/agreeGET同意好友请求
/friend_request/rejectGET拒绝好友请求

总结

这节我们设计了下技术方案。

技术栈:前端是 antd + react + vite,后端是 nest + prisma + socket.io,数据库是 mysql + redis,对象存储用 minio,API 文档用 swagger 生成,部署用 docker compose + pm2,网关使用 nginx。

数据库表有 7 个:用户表 users、好友关系表 friendship、聊天室表 chatroom、用户所在聊天室表 user_chatroom、聊天记录表 chat_history、好友申请表 friend_request、收藏表 favorite。

模块有 6 个:用户模块、好友管理模块、聊天室管理模块、聊天模块、收藏管理模块、好友请求管理模块。

下节正式开始开发。