2786530c54619e6f004f2a59428d2985a0981fbb
feedsystem_video_go
项目简介
基于 Go 的视频 Feed 系统后端,提供账号注册/登录、视频发布与查询、点赞/取消点赞、Feed 拉取等接口。默认使用 Gin + GORM + MySQL + JWT。
仓库内附 Postman Collection(见 test/*.json)方便调试 API。
目录结构
cmd/:程序入口(cmd/main.go)configs/:YAML 配置(configs/config.yaml)internal/account/:账号模块(实体/仓储/服务/HTTP handler)internal/video/:视频与点赞模块internal/feed/:Feed 拉取模块internal/http/:Gin 路由注册internal/middleware/:JWT 中间件test/:Postman Collection
快速开始
- 准备 MySQL,并创建数据库(默认名
feedsystem,可在configs/config.yaml修改)。 - 安装依赖:
go mod tidy - 启动服务:
go run ./cmd(端口默认8080) - 导入 Postman:
test/*.json,设置变量host=http://localhost:8080、jwt_token为登录返回的 token。
配置
配置文件:configs/config.yaml
server:
port: 8080
database:
host: localhost
port: 3306
user: root
password: 123456
dbname: feedsystem
认证说明(与代码一致)
- Header:
Authorization: Bearer <jwt> - JWT 解析成功后,还会校验该 token 是否等于数据库里账号当前保存的 token(见
internal/middleware/jwt.go),因此:- 同一账号再次登录会覆盖 token,旧 token 失效
/account/logout会清空 token,token 立即失效/account/changePassword成功后也会清空 token(需要重新登录拿新 token)
API(路由与鉴权)
路由注册见 internal/http/router.go。
账号(/account)
| 方法 | 路径 | 是否需要 JWT | 功能 | 请求体示例 |
|---|---|---|---|---|
| POST | /account/register |
否 | 注册账号 | {"username":"alice","password":"pass123"} |
| POST | /account/login |
否 | 登录,返回 token |
{"username":"alice","password":"pass123"} |
| POST | /account/changePassword |
否 | 修改指定用户名密码(会校验旧密码) | {"username":"alice","old_password":"pass123","new_password":"newpass456"} |
| POST | /account/findByID |
否 | 按 ID 查询账号 | {"id":1} |
| POST | /account/findByUsername |
否 | 按用户名查询账号 | {"username":"alice"} |
| POST | /account/rename |
是 | 修改当前登录用户用户名 | {"new_username":"alice_new"} |
| POST | /account/logout |
是 | 注销(撤销当前 token) | {} |
视频(/video)
| 方法 | 路径 | 是否需要 JWT | 功能 | 请求体示例 |
|---|---|---|---|---|
| POST | /video/listByAuthorID |
否 | 按作者 ID 列出视频(不分页) | {"author_id":1} |
| POST | /video/getDetail |
否 | 查询视频详情 | {"id":1} |
| POST | /video/publish |
是 | 发布视频(作者取自 JWT) | {"title":"demo","description":"...","play_url":"http://...","cover_url":"http://..."} |
说明:发布视频时 title、play_url、cover_url 为必填字段(见 internal/video/video_service.go)。
点赞(/like)
| 方法 | 路径 | 是否需要 JWT | 功能 | 请求体示例 |
|---|---|---|---|---|
| POST | /like/getLikesCount |
否 | 获取视频点赞总数 | {"video_id":1} |
| POST | /like/isLiked |
是 | 当前用户是否点赞 | {"video_id":1} |
| POST | /like/like |
是 | 点赞 | {"video_id":1} |
| POST | /like/unlike |
是 | 取消点赞 | {"video_id":1} |
Feed(/feed)
| 方法 | 路径 | 是否需要 JWT | 功能 | 请求体示例 |
|---|---|---|---|---|
| POST | /feed/listLatest |
否 | 拉取最新 Feed(按 create_time 倒序),limit 最大 50 |
{"limit":10,"latest_time":0} |
说明:
latest_time是 Unix 秒时间戳;当latest_time=0或不传时,返回最新一页(见internal/feed/handler.go)。- 响应里的
next_time是 JSON 序列化后的time.Time(RFC3339 字符串,见internal/feed/service.go)。下一页请求时,需要把它转换为 Unix 秒时间戳再传回latest_time。
数据表(自动迁移)
启动时会执行 AutoMigrate 创建/更新表结构:Account、Video、Like(见 internal/db/db.go)。
Description
Languages
Go
81.8%
TypeScript
12.9%
Shell
2.7%
CSS
1.7%
Dockerfile
0.8%
Other
0.1%