当前位置:实例文章 » JAVA Web实例» [文章]一张表实现短视频“评论区“完整功能

一张表实现短视频“评论区“完整功能

发布人: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`

以上就是短视频评论区系统的设计和实现。通过使用四张表来存储评论数据,并提供完整的功能,我们可以实现一个高效、易用的评论区系统。

其他信息

其他资源

Top