Files
VLoop/README.md
2025-12-09 16:35:49 +08:00

62 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# feedsystem_video_go
## 项目简介
基于 Go 的视频 feed 系统,提供用户注册 / 登录、视频发布与点赞、Feed 拉取等接口,默认使用 Gin + GORM + MySQL。仓库附带 Postman Collection 方便调试 API。
## 目录结构
- `cmd/`:程序入口(`main.go`
- `configs/`YAML 配置(`config.yaml`
- `internal/account/`:账号实体、仓储与业务逻辑
- `internal/video/`:视频与点赞模块
- `internal/feed/`Feed 列表
- `internal/http/`HTTP 路由
- `test/`Postman Collection`account.json` 等)
- `start.sh`:启动脚本示例
## 快速开始
1. 准备 Go 1.21+ 与 MySQL 8+ 环境。
2. 创建 `feedsystem` 数据库并根据需要修改 `configs/config.yaml`
3. 安装依赖:`go mod tidy`
4. 启动服务:`go run ./cmd`(或执行 `sh start.sh`
5. 在 Postman 中导入 `test/*.json`,设置 `host=http://localhost:8080``jwt_token` 为登录返回的 token。
## 身份认证说明
- 公共接口:`/account/register``/account/login``/video/listByAuthorID``/video/getDetail``/like/getLikesCount``/feed/listLatest`
- 需要 JWT 的接口:`/account/rename``/account/changePassword``/account/findByID``/account/findByUsername``/account/logout` 以及 `/video/publish``/like/*`
- 授权头格式:`Authorization: Bearer <jwt>`
- 用户修改密码后会立即使旧 token 失效,需要重新登录获取新的 JWT。
## API账号相关
| 方法 | 路径 | 功能 | 请求体 |
|------|------|------|--------|
| POST | `/account/register` | 注册账号 | `{"username": "...","password": "..."}` |
| POST | `/account/login` | 登录,返回 `token` | `{"username": "...","password": "..."}` |
| POST | `/account/changePassword` | 修改当前登录用户的密码(需要 JWT | `{"old_password": "...","new_password": "..."}` |
| POST | `/account/rename` | 修改当前登录用户的昵称(需要 JWT | `{"new_username": "..."}` |
| POST | `/account/findByID` | 根据 ID 查询账号(需要 JWT | `{"id": 1}` |
| POST | `/account/findByUsername` | 根据用户名查询账号(需要 JWT | `{"username": "alice"}` |
| POST | `/account/logout` | 注销当前 token需要 JWT | `{}` |
- 所有接口统一使用 JSON 请求 / 响应。
- 启动时调用 `db.AutoMigrate` 保证表结构最新。
## API视频相关
| 方法 | 路径 | 功能 | 请求体 |
|------|------|------|--------|
| POST | `/video/listByAuthorID` | 根据作者 ID 获取视频列表 | `{"author_id": 1}` |
| POST | `/video/getDetail` | 查询指定视频详情 | `{"id": 1}` |
| POST | `/video/publish` | 发布视频(需要 JWT自动读取登录用户为作者 | `{"title": "...","description": "...","play_url": "http://..."}` |
## API点赞相关
| 方法 | 路径 | 功能 | 请求体 |
|------|------|------|--------|
| POST | `/like/getLikesCount` | 获取视频点赞总数 | `{"video_id": 1}` |
| POST | `/like/like` | 给视频点赞(需要 JWT | `{"video_id": 1}` |
| POST | `/like/unlike` | 取消点赞(需要 JWT | `{"video_id": 1}` |
| POST | `/like/isLiked` | 判断当前用户是否点赞(需要 JWT | `{"video_id": 1}` |
## APIFeed 相关)
| 方法 | 路径 | 功能 | 请求体 |
|------|------|------|--------|
| POST | `/feed/listLatest` | 拉取瀑布流,`limit` 最大 50`latest_time` 为空时默认当前时间 | `{"limit": 10,"latest_time": 0}` |