From 50b38f1b0c309504cf0422f5875cf8a61a1faa04 Mon Sep 17 00:00:00 2001 From: Sisyphus Date: Sat, 25 Apr 2026 20:44:27 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=20README=20=E2=80=94?= =?UTF-8?q?=20=E5=8A=9F=E8=83=BD=E6=B8=85=E5=8D=95=E3=80=81=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=96=87=E6=A1=A3=E3=80=81=E6=B5=8B=E8=AF=95=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 122 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 93 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index d4005c3..a41154c 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,21 @@ # feedsystem_video_go -基于 Go 的短视频 Feed 系统(后端 + 前端),包含账号、视频、点赞、评论、关注与 Feed 流;支持 Redis 缓存与 RabbitMQ 异步 Worker(API 进程与 Worker 进程可拆分部署)。 +基于 Go + Vue 3 的短视频 Feed 系统,含账号、视频、点赞、评论、关注、Feed 流,支持 Redis 缓存与 RabbitMQ 异步 Worker(API 与 Worker 可拆分部署)。 -详细设计与接口说明请阅读:`feedsystem_video_go项目设计.md`(包含模块设计、表结构、流程图与接口清单)。 -## [项目演示](https://www.bilibili.com/video/BV1Dti7B9E6Y?vd_source=4b2884373b2c4c4147b10162c1709276) +## 功能 -## Docker Compose 一键启动(推荐) +| 模块 | 功能 | +|------|------| +| 账号 | 注册/登录/改名/改密/登出,头像上传,个人简介,Refresh Token 双 Token 鉴权 | +| 视频 | 上传/发布/删除,按作者查看,详情(三级缓存),#话题标签 | +| 点赞 | 点赞/取消/是否已赞/已赞列表,SSE 实时通知 | +| 评论 | 发布/删除/列表,@提及 通知 | +| 关注 | 关注/取关/粉丝列表/关注列表/粉丝计数,SSE 实时通知 | +| Feed | 最新/点赞榜/热度榜/关注流/话题标签流,冷热分离+游标分页,虚拟滚动 | +| 私信 | 发送/对话列表 | +| 通知 | SSE 实时推送,未读计数,已读标记 | -要求:已安装 Docker Desktop / Docker Engine + Docker Compose。 +## Docker Compose 一键启动 ```bash docker compose up -d --build @@ -16,44 +24,100 @@ docker compose up -d --build 访问: - 前端:`http://localhost:5173` - 后端 API:`http://localhost:8080` -- RabbitMQ 管理台:`http://localhost:15672`(默认账号 `admin` / `password123`) +- RabbitMQ 管理台:`http://localhost:15672`(`admin` / `password123`) -说明: -- Compose 会启动 `mysql`、`redis`、`rabbitmq`、`backend`(API)、`worker`、`frontend`。 -- 容器内后端配置使用 `backend/configs/config.docker.yaml`(会挂载到 `/app/configs/config.yaml`)。 +默认 `.env` 自动生成 JWT 密钥。生产环境请修改 `JWT_SECRET`。 -## 本地开发启动(不容器化) +## 测试数据 + +启动后内置 100 个测试用户(`user001` ~ `user100`,密码均为 `123456`),`user001` 已发布视频并拥有粉丝/点赞数据。 + +## 本地开发 -1) 先启动依赖(也可以只用 compose 拉起依赖): ```bash +# 启动依赖 docker compose up -d mysql redis rabbitmq -``` -2) 用 compose 启 MySQL 时,宿主机端口是 `3307`。本地 Go 进程请使用面向 compose 依赖的配置文件 `backend/configs/config.compose-local.yaml`。 - -3) 启动后端 API: -```bash +# 后端 cd backend CONFIG_PATH=configs/config.compose-local.yaml go run ./cmd -``` -4) 启动 Worker(消费 MQ、异步落库/更新 Redis 热榜): -```bash -cd backend +# Worker CONFIG_PATH=configs/config.compose-local.yaml go run ./cmd/worker -``` -5) 启动前端(开发模式): -```bash +# 前端 cd frontend -npm install -npm run dev +npm install && npm run dev ``` -前端默认使用 Vite 代理 `/api` 到 `http://127.0.0.1:8080`(见 `frontend/vite.config.ts`)。 +## 接口清单 -`backend/configs/config.yaml` 继续适用于本机原生 MySQL `3306` 的场景。 +### 账号 `/account` +| 方法 | 路径 | 鉴权 | 说明 | +|------|------|------|------| +| POST | `/register` | 否 | 注册(限流 5次/时/IP) | +| POST | `/login` | 否 | 登录,返回 access_token + refresh_token | +| POST | `/refresh` | 否 | 刷新 access_token(用 refresh_token) | +| POST | `/changePassword` | 否 | 改密码(需旧密码) | +| POST | `/findByID` | 否 | 按 ID 查用户 | +| POST | `/findByUsername` | 否 | 按用户名查 | +| POST | `/getProfile` | 否 | 用户主页(视频数/获赞/粉丝数) | +| POST | `/logout` | JWT | 登出(同时失效双 token) | +| POST | `/rename` | JWT | 改名 | +| POST | `/uploadAvatar` | JWT | 上传头像(jpg/png/webp,≤10MB) | +| POST | `/updateProfile` | JWT | 更新简介/头像 | -## Star History +### 视频 `/video` +| 方法 | 路径 | 鉴权 | 说明 | +|------|------|------|------| +| POST | `/publish` | JWT | 发布视频(自动提取 #话题) | +| POST | `/uploadVideo` | JWT | 上传视频文件(mp4,≤200MB) | +| POST | `/uploadCover` | JWT | 上传封面(jpg/png/webp,≤10MB) | +| POST | `/listByAuthorID` | 否 | 按作者查视频 | +| POST | `/getDetail` | 否 | 视频详情(三级缓存) | -[![Star History Chart](https://api.star-history.com/svg?repos=LeoninCS/feedsystem_video_go&type=Date)](https://www.star-history.com/#LeoninCS/feedsystem_video_go&Date) +### 点赞 `/like` +| POST | `/like` | JWT | 点赞 | +| POST | `/unlike` | JWT | 取消点赞 | +| POST | `/isLiked` | JWT | 是否已赞 | +| POST | `/listMyLikedVideos` | JWT | 我赞过的视频 | + +### 评论 `/comment` +| POST | `/listAll` | 否 | 评论列表(分页200,按时间升序) | +| POST | `/publish` | JWT | 发布评论(支持 @username 提及) | +| POST | `/delete` | JWT | 删除评论 | + +### 关注 `/social` +| POST | `/follow` | JWT | 关注 | +| POST | `/unfollow` | JWT | 取关 | +| POST | `/getAllFollowers` | JWT | 粉丝列表(含粉丝数) | +| POST | `/getAllVloggers` | JWT | 关注列表(含关注数) | +| POST | `/getCounts` | JWT | 粉丝/关注计数 | + +### Feed `/feed` +| POST | `/listLatest` | 软鉴权 | 最新视频(游标分页) | +| POST | `/listLikesCount` | 软鉴权 | 点赞排行(复合游标) | +| POST | `/listByPopularity` | 软鉴权 | 热度榜(快照分页) | +| POST | `/listByFollowing` | JWT | 关注流 | +| POST | `/listByTag` | 软鉴权 | 按 #话题 浏览 | + +### 通知 `/notification` +| GET | `/stream?token=` | 是 | SSE 实时推送 | +| POST | `/list` | 是 | 通知列表 | +| POST | `/markRead` | 是 | 标记已读(传 id 单条,不传全标) | +| POST | `/unreadCount` | 是 | 未读计数 | + +### 私信 `/message` +| POST | `/send` | JWT | 发送私信 | +| POST | `/list` | JWT | 对话列表 | + +## 环境变量 + +| 变量 | 默认值 | 说明 | +|------|--------|------| +| `JWT_SECRET` | `feedsystem-dev-secret-key` | JWT 签名密钥,生产须改 | +| `MYSQL_ROOT_PASSWORD` | `123456` | MySQL root 密码 | +| `REDIS_PASSWORD` | `123456` | Redis 密码 | +| `RABBITMQ_USER` / `RABBITMQ_PASS` | `admin` / `password123` | RabbitMQ 账号 | + +详见 `.env.example`。