一张表实现短视频“评论区“完整功能
发布人:shili8
发布时间:2025-01-09 08:18
阅读次数:0
**短视频评论区系统设计**
在短视频平台中,评论区是用户与内容互动的重要场所。为实现一个高效、易用的评论区系统,我们将设计一张表来存储评论数据,并提供完整的功能。
###1. 数据库设计我们使用 MySQL 作为数据库管理系统,设计以下四张表:
**users**
| 字段名 | 类型 | 描述 |
| --- | --- | --- |
| id | int | 用户 ID |
| username | varchar(255) | 用户名称 |
| email | varchar(255) | 用户邮箱 |
**videos**
| 字段名 | 类型 | 描述 |
| --- | --- | --- |
| id | int | 视频 ID |
| title | varchar(255) | 视频标题 |
| content | text | 视频内容 |
**comments**
| 字段名 | 类型 | 描述 |
| --- | --- | --- |
| id | int |评论 ID |
| video_id | int | 所属视频 ID |
| user_id | int | 发布者 ID |
| content | text |评论内容 |
| created_at | datetime |评论时间 |
**replies**
| 字段名 | 类型 | 描述 |
| --- | --- | --- |
| id | int | 回复 ID |
| comment_id | int | 所属评论 ID |
| user_id | int | 发布者 ID |
| content | text | 回复内容 |
| created_at | datetime | 回复时间 |
###2. 表结构
sqlCREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL); CREATE TABLE videos ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(255) NOT NULL, content TEXT NOT NULL); CREATE TABLE comments ( id INT PRIMARY KEY AUTO_INCREMENT, video_id INT NOT NULL, user_id INT NOT NULL, content TEXT NOT NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (video_id) REFERENCES videos(id), FOREIGN KEY (user_id) REFERENCES users(id) ); CREATE TABLE replies ( id INT PRIMARY KEY AUTO_INCREMENT, comment_id INT NOT NULL, user_id INT NOT NULL, content TEXT NOT NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (comment_id) REFERENCES comments(id), FOREIGN KEY (user_id) REFERENCES users(id) );
###3. 功能实现####1. 添加评论
php// controllers/CommentController.phppublic function addComment(Request $request, int $videoId): Response{ // 验证用户登录状态 if (!$this->isUserLoggedIn()) { return response()->json(['error' => '请先登录'],401); } // 获取评论内容 $content = $request->input('content'); // 创建新评论 $comment = new Comment(); $comment->video_id = $videoId; $comment->user_id = auth()->id(); $comment->content = $content; $comment->save(); return response()->json(['message' => '评论成功'],201); }
####2. 获取评论列表
php// controllers/CommentController.phppublic function getComments(int $videoId): Response{ // 获取视频的所有评论 $comments = Comment::where('video_id', $videoId)->with('replies')->get(); return response()->json($comments,200); }
####3. 添加回复
php// controllers/CommentController.phppublic function addReply(Request $request, int $commentId): Response{ // 验证用户登录状态 if (!$this->isUserLoggedIn()) { return response()->json(['error' => '请先登录'],401); } // 获取回复内容 $content = $request->input('content'); // 创建新回复 $reply = new Reply(); $reply->comment_id = $commentId; $reply->user_id = auth()->id(); $reply->content = $content; $reply->save(); return response()->json(['message' => '回复成功'],201); }
####4. 获取回复列表
php// controllers/CommentController.phppublic function getReplies(int $commentId): Response{ // 获取评论的所有回复 $replies = Reply::where('comment_id', $commentId)->get(); return response()->json($replies,200); }
###4. API接口设计####1. 添加评论* **POST /comments**
* **请求体:** `{"video_id": int, "content": string}`
* **响应:** `201 Created` 或 `401 Unauthorized`
####2. 获取评论列表* **GET /comments/{videoId}**
* **路径参数:** `{videoId: int}`
* **响应:** `200 OK` 或 `404 Not Found`
####3. 添加回复* **POST /replies**
* **请求体:** `{"comment_id": int, "content": string}`
* **响应:** `201 Created` 或 `401 Unauthorized`
####4. 获取回复列表* **GET /replies/{commentId}**
* **路径参数:** `{commentId: int}`
* **响应:** `200 OK` 或 `404 Not Found`
以上就是短视频评论区系统的设计和实现。通过使用四张表来存储评论数据,并提供完整的功能,我们可以实现一个高效、易用的评论区系统。