上节梳理了需求,画了原型图,这节来设计下技术方案。
技术栈
前端部分还是 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:
字段名 | 数据类型 | 描述 |
---|---|---|
id | INT | 用户ID |
username | VARCHAR(50) | 用户名 |
password | VARCHAR(50) | 密码 |
nick_name | VARCHAR(50) | 昵称 |
VARCHAR(50) | 邮箱 | |
head_pic | VARCHAR(100) | 头像 |
create_time | DATETIME | 创建时间 |
update_time | DATETIME | 更新时间 |
好友关系表 friendship:
字段名 | 数据类型 | 描述 |
---|---|---|
user1_id | INT | 用户1 |
user2_id | INT | 用户2 |
聊天室表 chatroom:
字段名 | 数据类型 | 描述 |
---|---|---|
id | INT | 聊天室ID |
name | VARCHAR(50) | 群聊名 |
type | BOOLEAN | 类型(单聊、群聊) |
create_time | DATETIME | 创建时间 |
update_time | DATETIME | 更新时间 |
用户所在聊天室表 user_chatroom:
字段名 | 数据类型 | 描述 |
---|---|---|
user_id | INT | 用户ID |
chatroom_id | INT | 聊天室ID |
聊天记录表 chat_history:
字段名 | 数据类型 | 描述 |
---|---|---|
id | INT | 聊天记录ID |
content | VARCHAR(500) | 聊天内容 |
chatroom_id | INT | 聊天室ID |
sender_id | INT | 发送者ID |
send_time | DATETIME | 发送时间 |
update_time | DATETIME | 更新时间 |
好友申请表 friend_request:
字段名 | 数据类型 | 描述 |
---|---|---|
id | INT | 好友申请id |
from_user_id | INT | 发送方 |
to_user_id | INT | 待添加好友 |
reason | VARCHAR(100) | 添加理由 |
status | VARCHAR(10) | 状态(待处理、已同意、已拒绝) |
create_time | DATETIME | 创建时间 |
update_time | DATETIME | 更新时间 |
收藏表 favorite:
字段名 | 数据类型 | 描述 |
---|---|---|
id | INT | ID |
user_id | INT | 用户 ID |
chat_history_id | INT | 聊天记录ID |
create_time | DATETIME | 创建时间 |
update_time | DATETIME | 更新时间 |
然后划分下模块:
模块划分
首先是用户模块,实现登录、注册、信息修改的功能:
接口路径 | 请求方式 | 描述 |
---|---|---|
/user/login | POST | 用户登录 |
/user/register | POST | 用户注册 |
/user/update | POST | 用户个人信息修改 |
/user/update_password | POST | 用户修改密码 |
好友管理模块:
接口路径 | 请求方式 | 描述 |
---|---|---|
/friendship/add | POST | 添加好友 |
/friendship/delete | DELETE | 删除好友 |
/friendship/list | GET | 好友列表 |
聊天室管理模块:
接口路径 | 请求方式 | 描述 |
---|---|---|
/chatroom/join | GET | 加入聊天室 |
/chatroom/exit | GET | 退出聊天室 |
/chatroom/list | GET | 聊天室列表 |
/chatroom/add | POST | 新建聊天室(单聊、群聊) |
聊天模块:
接口路径 | 请求方式 | 描述 |
---|---|---|
/chat | WEBSOCKET | 聊天 |
收藏管理模块:
接口路径 | 请求方式 | 描述 |
---|---|---|
/favorite/add | GET | 添加收藏 |
/favorite/delete | DELETE | 删除收藏 |
/favorite/list | GET | 收藏列表 |
好友请求管理模块:
接口路径 | 请求方式 | 描述 |
---|---|---|
/friend_request/list | GET | 好友请求列表 |
/friend_request/agree | GET | 同意好友请求 |
/friend_request/reject | GET | 拒绝好友请求 |
总结
这节我们设计了下技术方案。
技术栈:前端是 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 个:用户模块、好友管理模块、聊天室管理模块、聊天模块、收藏管理模块、好友请求管理模块。
下节正式开始开发。