blob: dc59ec1f0c71d72e5a0d9157fbc74cc11350bc73 [file] [log] [blame]
wuchimedese5722e32025-04-13 17:38:50 +08001CREATE DATABASE IF NOT EXISTS g8backend;
2USE g8backend;
3
wuchimedes079c1632025-04-02 22:01:20 +08004CREATE TABLE IF NOT EXISTS `users` (
5 user_id INT AUTO_INCREMENT PRIMARY KEY,
6 user_name VARCHAR(255) NOT NULL,
7 password VARCHAR(255) NOT NULL,
wuchimedesa0649c62025-04-05 15:53:39 +08008 email VARCHAR(255) NOT NULL UNIQUE,
9 passkey VARCHAR(255) NOT NULL UNIQUE
wuchimedes079c1632025-04-02 22:01:20 +080010);
11
wuchimedes22ee83c2025-04-25 00:17:47 +080012CREATE TABLE IF NOT EXISTS `user_stats` (
13 user_id INT PRIMARY KEY,
14 passkey VARCHAR(255) NOT NULL UNIQUE,
15 total_upload FLOAT NOT NULL DEFAULT 0,
16 total_download FLOAT NOT NULL DEFAULT 0,
17 last_update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
18 FOREIGN KEY (user_id) REFERENCES users(user_id),
19 FOREIGN KEY (passkey) REFERENCES users(passkey)
20);
21
wuchimedes079c1632025-04-02 22:01:20 +080022CREATE TABLE IF NOT EXISTS `torrents` (
23 torrent_id INT AUTO_INCREMENT PRIMARY KEY,
24 user_id INT NOT NULL,
25 torrent_name VARCHAR(255) NOT NULL,
wuchimedes223bfab2025-04-04 17:16:05 +080026 info_hash BINARY(20) NOT NULL,
wuchimedes079c1632025-04-02 22:01:20 +080027 file_size FLOAT NOT NULL,
wuchimedes079c1632025-04-02 22:01:20 +080028 FOREIGN KEY (user_id) REFERENCES users(user_id)
29);
30
31CREATE TABLE IF NOT EXISTS `peers` (
wuchimedesa0649c62025-04-05 15:53:39 +080032 passkey VARCHAR(255) NOT NULL,
wuchimedes223bfab2025-04-04 17:16:05 +080033 info_hash BINARY(20) NOT NULL,
34 peer_id VARCHAR(20) NOT NULL,
wuchimedes079c1632025-04-02 22:01:20 +080035 ip_address VARCHAR(128) NOT NULL,
36 port INT NOT NULL,
37 uploaded FLOAT NOT NULL,
38 downloaded FLOAT NOT NULL,
wuchimedes223bfab2025-04-04 17:16:05 +080039 last_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
wuchimedesa0649c62025-04-05 15:53:39 +080040 FOREIGN KEY (passkey) REFERENCES users(passkey),
41 PRIMARY KEY (passkey, info_hash, peer_id)
wuchimedes079c1632025-04-02 22:01:20 +080042);
wuchimedese5722e32025-04-13 17:38:50 +080043
44CREATE TABLE IF NOT EXISTS `posts` (
45 post_id INT AUTO_INCREMENT PRIMARY KEY,
46 user_id INT NOT NULL,
47 post_title VARCHAR(255) NOT NULL,
48 post_content TEXT NOT NULL,
49 post_type ENUM('resource', 'discussion') NOT NULL,
50 created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
51 FOREIGN KEY (user_id) REFERENCES users(user_id)
52);
53
wuchimedes03f93582025-04-21 15:32:59 +080054CREATE TABLE IF NOT EXISTS `tags`(
55 tag_id INT AUTO_INCREMENT PRIMARY KEY,
56 tag_name VARCHAR(255) NOT NULL UNIQUE,
57 parent_id INT DEFAULT NULL,
58 FOREIGN KEY (parent_id) REFERENCES tags(tag_id)
59);
60
61CREATE TABLE IF NOT EXISTS `post_tag` (
62 post_id INT NOT NULL,
63 tag_id INT NOT NULL,
64 FOREIGN KEY (post_id) REFERENCES posts(post_id),
65 FOREIGN KEY (tag_id) REFERENCES tags(tag_id),
66 PRIMARY KEY (post_id, tag_id)
67);
68
wuchimedese5722e32025-04-13 17:38:50 +080069CREATE TABLE IF NOT EXISTS `post_likes` (
70 user_id INT NOT NULL,
71 post_id INT NOT NULL,
72 FOREIGN KEY (user_id) REFERENCES users(user_id),
73 FOREIGN KEY (post_id) REFERENCES posts(post_id),
74 PRIMARY KEY (user_id, post_id)
75);
夜雨声烦7e6eb382025-04-22 01:18:00 +080076
77-- 关注关系表
78CREATE TABLE IF NOT EXISTS `user_follows` (
79 follower_id INT NOT NULL,
80 followed_id INT NOT NULL,
81 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
82 FOREIGN KEY (follower_id) REFERENCES users(user_id),
83 FOREIGN KEY (followed_id) REFERENCES users(user_id),
84 PRIMARY KEY (follower_id, followed_id)
85);
86
87-- 私信表
88CREATE TABLE IF NOT EXISTS `private_messages` (
89 message_id INT AUTO_INCREMENT PRIMARY KEY,
90 sender_id INT NOT NULL,
91 receiver_id INT NOT NULL,
92 content TEXT NOT NULL,
93 sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
94 is_read BOOLEAN DEFAULT false,
95 FOREIGN KEY (sender_id) REFERENCES users(user_id),
96 FOREIGN KEY (receiver_id) REFERENCES users(user_id)
97);