post_rating
Change-Id: Ia1a6fb3f87b793a6307046e36951c1fb36b213c8
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 22f3728..4e44282 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -3,6 +3,7 @@
spring.datasource.url=jdbc:mysql://localhost:3306/g8backend
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.sql.init.mode=always
+#logging.level.root=DEBUG
mybatis-plus.mapper-locations=classpath*:/mapper/**/*.xml
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 607d353..a6860f1 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -1,11 +1,66 @@
-# # 后面统一数据库数据用
-#
-# # tags表父标签
-# INSERT INTO `tags` (tag_id, tag_name, parent_id) VALUES (1, '电影', NULL);
-# INSERT INTO `tags` (tag_id, tag_name, parent_id) VALUES (2, '游戏', NULL);
-# INSERT INTO `tags` (tag_id, tag_name, parent_id) VALUES (3, '音乐', NULL);
-#
-# # tags表子标签
-# INSERT INTO `tags` (tag_id, tag_name, parent_id) VALUES (4, '动作', 1);
-# INSERT INTO `tags` (tag_id, tag_name, parent_id) VALUES (5, '喜剧', 1);
-# INSERT INTO `tags` (tag_id, tag_name, parent_id) VALUES (6, '科幻', 1);
\ No newline at end of file
+-- Game 分类
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES (0, 'Game', NULL);
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES
+ (1, 'android', 0),
+ (2, 'mac', 0),
+ (3, 'pc', 0),
+ (4, 'ios', 0),
+ (5, 'other', 0),
+ (6, 'action', 0),
+ (7, 'adventure', 0),
+ (8, 'leisure', 0),
+ (9, 'riddle', 0),
+ (10, 'sport', 0),
+ (11, 'strategy', 0),
+ (12, 'table', 0);
+
+-- video 分类
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES (20, 'video', NULL);
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES
+ (21, 'chinese', 20),
+ (22, 'America', 20),
+ (23, 'Japan', 20),
+ (24, 'Korea', 20),
+ (25, 'Europe', 20),
+ (26, 'other', 20),
+ (27, 'Short', 20),
+ (28, 'plot', 20),
+ (29, 'comedy', 20),
+ (30, 'love', 20),
+ (31, 'action', 20),
+ (32, 'terror', 20),
+ (33, 'science fiction', 20),
+ (34, 'commit a crime', 20),
+ (35, 'Thriller', 20);
+
+-- music 分类
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES (40, 'music', NULL);
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES
+ (41, 'chinese', 40),
+ (42, 'America', 40),
+ (43, 'Japan', 40),
+ (44, 'Korea', 40),
+ (45, 'Europe', 40),
+ (46, 'other', 40),
+ (47, 'rap', 40),
+ (48, 'Electric sound', 40),
+ (49, 'Guofeng', 40),
+ (50, 'motion', 40),
+ (51, 'ballad', 40),
+ (52, 'Rock and roll', 40),
+ (53, 'classical', 40);
+
+-- software 分类
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES (60, 'software', NULL);
+INSERT IGNORE INTO tags (tag_id, tag_name, parent_id) VALUES
+ (61, 'android', 60),
+ (62, 'mac', 60),
+ (63, 'pc', 60),
+ (64, 'ios', 60),
+ (65, 'other', 60),
+ (66, 'life', 60),
+ (67, 'shopping', 60),
+ (68, 'video', 60),
+ (69, 'music', 60),
+ (70, 'read', 60),
+ (71, 'system', 60);
diff --git a/src/main/resources/mapper/PostRatingMapper.xml b/src/main/resources/mapper/PostRatingMapper.xml
new file mode 100644
index 0000000..097eeb8
--- /dev/null
+++ b/src/main/resources/mapper/PostRatingMapper.xml
@@ -0,0 +1,5 @@
+<insert id="insertOrUpdate">
+ INSERT INTO post_ratings (user_id, post_id, rating)
+ VALUES (#{userId}, #{postId}, #{rating})
+ ON DUPLICATE KEY UPDATE rating = VALUES(rating)
+</insert>
\ No newline at end of file
diff --git a/src/main/resources/mapper/TorrentMapper.xml b/src/main/resources/mapper/TorrentMapper.xml
index 9b53d29..243fd92 100644
--- a/src/main/resources/mapper/TorrentMapper.xml
+++ b/src/main/resources/mapper/TorrentMapper.xml
@@ -4,8 +4,8 @@
<mapper namespace="com.example.g8backend.mapper.TorrentMapper">
<insert id="insertTorrent" >
- INSERT INTO torrents (user_id, torrent_name, info_hash, file_size)
- VALUES (#{userId}, #{torrentName}, UNHEX(#{infoHash}), #{fileSize})
+ INSERT INTO torrents (user_id, torrent_name, file_path, info_hash, file_size)
+ VALUES (#{userId}, #{torrentName}, #{filePath}, UNHEX(#{infoHash}), #{fileSize})
</insert>
<select id="getTorrentByInfoHash" resultType="com.example.g8backend.entity.Torrent">
@@ -13,6 +13,7 @@
torrent_id,
user_id,
torrent_name,
+ file_path,
HEX(info_hash) AS infoHash,
file_size
FROM torrents
@@ -24,6 +25,7 @@
torrent_id,
user_id,
torrent_name,
+ file_path,
HEX(info_hash) AS infoHash,
file_size
FROM torrents
diff --git a/src/main/resources/mapper/UserStatsMapper.xml b/src/main/resources/mapper/UserStatsMapper.xml
new file mode 100644
index 0000000..3560a39
--- /dev/null
+++ b/src/main/resources/mapper/UserStatsMapper.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.example.g8backend.mapper.UserStatsMapper">
+ <update id="incrementTraffic">
+ UPDATE user_stats
+ SET total_upload = total_upload + #{deltaUploaded},
+ total_download = total_download + #{deltaDownloaded}
+ WHERE passkey = #{passkey}
+ </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql
index c0659b3..f6d061b 100644
--- a/src/main/resources/schema.sql
+++ b/src/main/resources/schema.sql
@@ -6,11 +6,22 @@
`email` VARCHAR(255) NOT NULL UNIQUE,
`passkey` VARCHAR(255) NOT NULL UNIQUE
);
--- 种子表(保持不变)
+-- 用户统计表
+CREATE TABLE IF NOT EXISTS `user_stats` (
+ user_id INT PRIMARY KEY,
+ passkey VARCHAR(255) NOT NULL UNIQUE,
+ total_upload FLOAT NOT NULL DEFAULT 0,
+ total_download FLOAT NOT NULL DEFAULT 0,
+ last_update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ FOREIGN KEY (user_id) REFERENCES users(user_id),
+ FOREIGN KEY (passkey) REFERENCES users(passkey)
+);
+-- 种子表
CREATE TABLE IF NOT EXISTS `torrents` (
`torrent_id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL,
`torrent_name` VARCHAR(255) NOT NULL,
+ `file_path` VARCHAR(255) NOT NULL,
`info_hash` BINARY(20) NOT NULL,
`file_size` FLOAT NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`)
@@ -36,17 +47,21 @@
`view_count` INT DEFAULT 0 COMMENT '浏览数',
`post_title` VARCHAR(255) NOT NULL,
`post_content` TEXT NOT NULL,
+ `torrent_id` INT DEFAULT NULL,
`post_type` ENUM('resource', 'discussion') NOT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_calculated` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后热度计算时间',
+ `average_rating` DECIMAL(3,2) DEFAULT 0.00 COMMENT '帖子平均评分',
+ `rating_count` INT DEFAULT 0 COMMENT '总评分人数';
FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`),
+ FOREIGN KEY (`torrent_id`) REFERENCES `torrents`(`torrent_id`),
INDEX `idx_hot_score` (`hot_score`), -- 新增热度索引
INDEX `idx_post_type` (`post_type`) -- 新增类型索引
);
-- 标签表(保持不变)
CREATE TABLE IF NOT EXISTS `tags`(
- `tag_id` INT AUTO_INCREMENT PRIMARY KEY,
- `tag_name` VARCHAR(255) NOT NULL UNIQUE,
+ `tag_id` INT PRIMARY KEY,
+ `tag_name` VARCHAR(255) NOT NULL,
`parent_id` INT DEFAULT NULL,
FOREIGN KEY (`parent_id`) REFERENCES `tags`(`tag_id`)
);
@@ -110,7 +125,7 @@
FOREIGN KEY (`post_id`) REFERENCES `posts`(`post_id`),
INDEX `idx_user_view_time` (`user_id`, `view_time` DESC) -- 新增用户浏览时间索引
);
-CREATE TABLE user_tag_preference (
+CREATE TABLE IF NOT EXISTS user_tag_preference (
user_id INT NOT NULL COMMENT '用户ID',
tag_id INT NOT NULL COMMENT '标签ID',
weight DOUBLE DEFAULT 1.0 COMMENT '偏好权重(浏览越多权重越高)',
@@ -118,4 +133,14 @@
PRIMARY KEY (user_id, tag_id),
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (tag_id) REFERENCES tags(tag_id)
+);
+CREATE TABLE IF NOT EXISTS `post_ratings` (
+ `user_id` INT NOT NULL COMMENT '用户ID',
+ `post_id` INT NOT NULL COMMENT '帖子ID',
+ `rating` TINYINT NOT NULL CHECK (`rating` BETWEEN 1 AND 5) COMMENT '评分值(1-5)',
+ `rated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '评分时间',
+ PRIMARY KEY (`user_id`, `post_id`), -- 确保每个用户对同一帖子只能评分一次
+ FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`),
+ FOREIGN KEY (`post_id`) REFERENCES `posts`(`post_id`),
+ INDEX idx_post_ratings_post_id ON post_ratings (post_id)
);
\ No newline at end of file