更新api文档,修改数据表结构,新增object文件

Change-Id: I718db9ed5d4128aa3db1be3f4ba75547872811f8
diff --git a/src/main/java/object/Appeal.java b/src/main/java/object/Appeal.java
index 66c8822..3df37e8 100644
--- a/src/main/java/object/Appeal.java
+++ b/src/main/java/object/Appeal.java
@@ -1,5 +1,9 @@
 package object;
 
 public class Appeal {
-    
+    public String appealid;
+    public String appealuserid;
+    public String content;
+    public String fileURL;
+    public int state; // 0: pending, 1: approved, 2: rejected
 }
diff --git a/src/main/java/object/BegInfo.java b/src/main/java/object/BegInfo.java
index ab7c296..1ac6bf5 100644
--- a/src/main/java/object/BegInfo.java
+++ b/src/main/java/object/BegInfo.java
@@ -1,5 +1,9 @@
 package object;
 
 public class BegInfo {
-    
+    public String begid;
+    public int begnumbers;
+    public int magic;
+    public String endtime;
+    public boolean hasseed;
 }
diff --git a/src/main/java/object/Notice.java b/src/main/java/object/Notice.java
index 8bc9feb..244eee1 100644
--- a/src/main/java/object/Notice.java
+++ b/src/main/java/object/Notice.java
@@ -1,5 +1,8 @@
 package object;
 
 public class Notice {
-    
+    public String noticeid;
+    public String noticecontent;
+    public boolean state;
+    public String posttag;
 }
diff --git a/src/main/java/object/Post.java b/src/main/java/object/Post.java
index a61bc3e..84f9757 100644
--- a/src/main/java/object/Post.java
+++ b/src/main/java/object/Post.java
@@ -1,5 +1,11 @@
 package object;
 
 public class Post {
-    
+    public String postid;
+    public String posttitle;
+    public String postcontent;
+    public String postuserid;
+    public String posttime;
+    public String replytime;
+    public String readtime;
 }
diff --git a/src/main/java/object/Profile.java b/src/main/java/object/Profile.java
index 7293a47..a33e7cd 100644
--- a/src/main/java/object/Profile.java
+++ b/src/main/java/object/Profile.java
@@ -1,5 +1,13 @@
 package object;
 
-public class Profile {
-    
+public class Profile {//迁移信息
+    public String profileurl;
+    public String userid;
+    public boolean exampass;
+    public String magictogive;
+    public String uploadtogive;
+    public String downloadtogive;
+    public String magicgived;
+    public String uploadgived;
+    public String downloadgived;
 }
diff --git a/src/main/java/object/Seed.java b/src/main/java/object/Seed.java
index dbee2b6..b353f46 100644
--- a/src/main/java/object/Seed.java
+++ b/src/main/java/object/Seed.java
@@ -1,5 +1,13 @@
 package object;
 
 public class Seed {
-    
+    public String seedid;
+    public String seeduserid;
+    public int faketime;
+    public String outurl;
+    public String title;
+    public String subtitle;
+    public String seedsize;
+    public String seedtag;
+    public int downloadtimes;
 }
diff --git a/src/main/java/object/TransRecord.java b/src/main/java/object/TransRecord.java
index d78572d..e32dce2 100644
--- a/src/main/java/object/TransRecord.java
+++ b/src/main/java/object/TransRecord.java
@@ -1,8 +1,12 @@
 package object;
 
 public class TransRecord{
-    String day;
-    String hour;
-    String minute;
-    String second;
+    public String taskid;
+    public String uploaduserid;
+    public String downloaduserid;
+    public String seedid;
+    public int upload;
+    public int download;
+    public int maxupload;
+    public int maxdownload;
 }
\ No newline at end of file
diff --git a/src/main/java/object/User.java b/src/main/java/object/User.java
index 5dd9054..b9d72a1 100644
--- a/src/main/java/object/User.java
+++ b/src/main/java/object/User.java
@@ -1,5 +1,15 @@
 package object;
 
 public class User {
-    private String userid;
+    public String userid;
+    public String username;
+    public String password;
+    public String sex;
+    public String age;
+    public String email;
+    public String school;
+    public String pictureurl;
+    public String profile;
+    public boolean accountstate;
+    public int invitetimes;
 }
diff --git a/src/main/java/object/UserPT.java b/src/main/java/object/UserPT.java
index b69089a..0332640 100644
--- a/src/main/java/object/UserPT.java
+++ b/src/main/java/object/UserPT.java
@@ -1,5 +1,11 @@
 package object;
 
 public class UserPT {
-    
+    public String userid;
+    public int magic;
+    public int upload;
+    public int download;
+    public double share;
+    public String farmurl;
+    public String viptime;
 }
diff --git "a/\345\274\200\345\217\221\346\226\207\346\241\243/API\346\226\207\346\241\243.md" "b/\345\274\200\345\217\221\346\226\207\346\241\243/API\346\226\207\346\241\243.md"
index e5acc05..f46d856 100644
--- "a/\345\274\200\345\217\221\346\226\207\346\241\243/API\346\226\207\346\241\243.md"
+++ "b/\345\274\200\345\217\221\346\226\207\346\241\243/API\346\226\207\346\241\243.md"
@@ -114,3 +114,292 @@
 | -------- | ------------------------------------------------------------ |

 | 用户迁移 | `bool UploadProfile(Profile pr)`<br />`ProfileID GetProfile(ProfileID)`<br />`bool examineProfile(bool passornot)`<br />`List[Profile] GetToExamines()`<br /> |

 

+

+

+# 环境变量维护值

+

+* TrackerURL

+* 预期做种数

+* FakeTime:做假种次数

+* BegVote:悬赏种子的投票阈值

+

+

+

+

+

+# 数据表设计

+

+* User表:存储用户的基本信息

+  * 用户ID(字符串),邮箱(字符串):主键,唯一标识,

+  * 用户名:字符串

+  * 密码:字符串

+  * 性别:m或者f,

+  * 学校:字符串,

+  * 头像URL:字符串

+  * 个人说明:字符串

+  * 账户状态:是否被ban,布尔值(0正常,1被ban)

+  * 用户剩余可邀请数量

+* 用户邀请表

+  * 用户ID:字符串,主键

+  * 邀请人邮箱:字符串,主键

+  * 邀请人是否注册:布尔值

+* UserPT表:存储用户的PT站信息

+  * 用户ID:主键,应该设置为User表的外键(User表中有这里才能插入,User表删除了,这里必须要删除)

+  * 魔力值:整数,用于兑换上传量,下载量,VIP次数

+  * 上传量:整数,

+  * 下载量:整数

+  * 分享率:小数

+  * 参与播种机制默认磁盘位置:字符串

+  * VIP下载次数:整数

+* Seed:种子表,存放每个种子的基本信息

+  * SeedID:种子ID,每个种子的唯一编号,主键,字符串

+  * 保种用户ID:字符串

+  * 标记假种次数:如果检测到一次则加一,成功了清0,大于环境变量的FakeTime则标记为Cheat

+  * 上次假种检查时间

+  * 外部下载URL:字符串

+  * 标题:字符串

+  * 副标题:字符串

+  * 种子大小:字符串

+  * 种子标签:字符串

+  * 种子热度(下载量):整数

+* SeedDownload:种子文件下载表(每一条记录表示一次传输任务)

+  * 传输任务ID:唯一标识每次传输任务

+  * 用户id:字符串,应该设置为User表的外键(User表中有这里才能插入,User表删除了,这里必须要删除)

+  * 种子id:下载的哪个种子文件,应该设置为Seed表的外键(Seed表中有这里才能插入,Seed表删除了,这里必须要删除)

+  * 下载开始时间:

+  * 下载完成时间:

+  * 是否是专线下载:bool,0表示正常,1表示专线

+  * 下载端ip

+* VipSeed:缓存种子数据表

+  * 种子id:应该设置为Seed表的外键(Seed表中有这里才能插入,Seed表删除了,这里必须要删除)

+  * 做种数(小于等于环境变量:预期做种数)

+  * 奖励魔力值数量:

+  * 是否继续缓存:0表示继续缓存,1表示不在缓存中

+

+* Transport:种子传输信息表

+  * 传输任务ID:唯一标识每次传输任务,每次增量的时候通过选择ID然后增加对应字段值,主键

+  * 上传用户ID:字符串,主键,同时应该是User表的外键(User表中有这里才能插入,User表删除了,这里必须要删除)

+  * 下载用户ID:字符串,主键,同时应该是User表的外键(User表中有这里才能插入,User表删除了,这里必须要删除)

+  * 种子id:字符串必须是Seed的外键,(Seed表中有这里才能插入,Seed表删除了,这里必须要删除)

+  * 用户上传量:整数

+  * 用户下载量:整数

+  * 用户上传峰值:整数

+  * 用户下载峰值:整数

+

+* BegSeed:求种任务列表

+  * 求种帖子ID:唯一标识

+  * 求种人数:有多少个人页点了“求种”,整数

+  * 悬赏魔力值:(悬赏者付10%的钱)

+  * 悬赏截止时间:

+  * 是否有合适种子

+* SubmitSeed:提交悬赏任务

+  * 求种ID:唯一标识需要是BegSeed的外键

+  * 种子ID:唯一标识:需要是Seed的外键

+  * 投票:大于环境变量设置票数则在BegSeed中更新为合适

+* 帖子表

+  * 帖子ID:唯一标识

+  * 标题,

+  * 内容,

+  * 发帖用户,

+  * 发帖时间,

+  * 回复数量,

+  * 查看次数

+* 帖子回复表

+  * 回复ID,

+  * 回复对应帖子ID(要是帖子表的外键)

+  * 回复内容,

+  * 回复用户,

+  * 回复时间

+

+* 公告表

+  * 公告ID

+  * 公告内容,

+  * 公告状态:布尔值,表示是否公示

+  * 公共标签

+* 用户收藏夹表(没有主键)

+  * 用户ID(User表外键)

+  * 收藏的种子ID(Seed表外键,要设置级联删除)

+* 用户迁移表

+  * 迁移任务ID:唯一标识

+  * 用户ID:外键

+  * 迁移申请书的URL

+  * 是否评审通过

+  * 待发放魔力值

+  * 已发放魔力值

+  * 待发放上传量

+  * 已发放上传量

+

+```sql

+-- 用户表

+CREATE TABLE `User` (

+  `user_id` VARCHAR(36) NOT NULL,

+  `email` VARCHAR(255) NOT NULL,

+  `username` VARCHAR(100) NOT NULL,

+  `password` VARCHAR(255) NOT NULL,

+  `gender` ENUM('m','f') NOT NULL,

+  `school` VARCHAR(255) DEFAULT NULL,

+  `avatar_url` VARCHAR(255) DEFAULT NULL,

+  `bio` TEXT,

+  `account_status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0=正常,1=被ban',

+  `invite_left` INT NOT NULL DEFAULT 0,

+  PRIMARY KEY (`user_id`,`email`),

+  UNIQUE KEY `uniq_email` (`email`)

+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+

+-- 用户邀请表

+CREATE TABLE `UserInvite` (

+  `user_id` VARCHAR(36) NOT NULL,

+  `inviter_email` VARCHAR(255) NOT NULL,

+  `inviter_registered` TINYINT(1) NOT NULL DEFAULT 0,

+  PRIMARY KEY (`user_id`,`inviter_email`),

+  CONSTRAINT `fk_ui_user` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE

+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+

+-- 用户 PT 信息表

+CREATE TABLE `UserPT` (

+  `user_id` VARCHAR(36) NOT NULL,

+  `magic` INT NOT NULL DEFAULT 0,

+  `uploaded` BIGINT NOT NULL DEFAULT 0,

+  `downloaded` BIGINT NOT NULL DEFAULT 0,

+  `ratio` DECIMAL(5,2) NOT NULL DEFAULT 0.00,

+  `default_seed_path` VARCHAR(255) DEFAULT NULL,

+  `vip_downloads` INT NOT NULL DEFAULT 0,

+  PRIMARY KEY (`user_id`),

+  CONSTRAINT `fk_pt_user` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE

+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+

+-- 种子表

+CREATE TABLE `Seed` (

+  `seed_id` VARCHAR(64) NOT NULL,

+  `owner_user_id` VARCHAR(36) NOT NULL,

+  `fake_hits` INT NOT NULL DEFAULT 0,

+  `last_fake_check` DATETIME DEFAULT NULL,

+  `external_url` VARCHAR(255) DEFAULT NULL,

+  `title` VARCHAR(255) NOT NULL,

+  `subtitle` VARCHAR(255) DEFAULT NULL,

+  `size` VARCHAR(50) NOT NULL,

+  `tags` VARCHAR(255) DEFAULT NULL,

+  `popularity` INT NOT NULL DEFAULT 0,

+  PRIMARY KEY (`seed_id`),

+  CONSTRAINT `fk_seed_user` FOREIGN KEY (`owner_user_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE

+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+

+-- 种子下载表

+CREATE TABLE `SeedDownload` (

+  `task_id` VARCHAR(64) NOT NULL,

+  `user_id` VARCHAR(36) NOT NULL,

+  `seed_id` VARCHAR(64) NOT NULL,

+  `download_start` DATETIME NOT NULL,

+  `download_end` DATETIME DEFAULT NULL,

+  `is_dedicated` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0=普通,1=专线',

+  `client_ip` VARCHAR(45) DEFAULT NULL,

+  PRIMARY KEY (`task_id`),

+  CONSTRAINT `fk_sd_user` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE,

+  CONSTRAINT `fk_sd_seed` FOREIGN KEY (`seed_id`) REFERENCES `Seed`(`seed_id`) ON DELETE CASCADE

+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+

+-- 缓存种子数据表

+CREATE TABLE `VipSeed` (

+  `seed_id` VARCHAR(64) NOT NULL,

+  `seeder_count` INT NOT NULL DEFAULT 0,

+  `reward_magic` INT NOT NULL DEFAULT 0,

+  `stop_caching` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0=继续缓存,1=不缓存',

+  PRIMARY KEY (`seed_id`),

+  CONSTRAINT `fk_vip_seed` FOREIGN KEY (`seed_id`) REFERENCES `Seed`(`seed_id`) ON DELETE CASCADE

+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+

+-- 传输信息表

+CREATE TABLE `Transport` (

+  `task_id` VARCHAR(64) NOT NULL,

+  `uploader_id` VARCHAR(36) NOT NULL,

+  `downloader_id` VARCHAR(36) NOT NULL,

+  `seed_id` VARCHAR(64) NOT NULL,

+  `uploaded` BIGINT NOT NULL DEFAULT 0,

+  `downloaded` BIGINT NOT NULL DEFAULT 0,

+  `upload_peak` BIGINT NOT NULL DEFAULT 0,

+  `download_peak` BIGINT NOT NULL DEFAULT 0,

+  PRIMARY KEY (`task_id`, `uploader_id`, `downloader_id`),

+  CONSTRAINT `fk_tr_user_up` FOREIGN KEY (`uploader_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE,

+  CONSTRAINT `fk_tr_user_down` FOREIGN KEY (`downloader_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE,

+  CONSTRAINT `fk_tr_seed` FOREIGN KEY (`seed_id`) REFERENCES `Seed`(`seed_id`) ON DELETE CASCADE

+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+

+-- 求种任务表

+CREATE TABLE `BegSeed` (

+  `beg_id` VARCHAR(64) NOT NULL,

+  `beg_count` INT NOT NULL DEFAULT 0,

+  `reward_magic` INT NOT NULL DEFAULT 0,

+  `deadline` DATETIME NOT NULL,

+  `has_match` TINYINT(1) NOT NULL DEFAULT 0,

+  PRIMARY KEY (`beg_id`)

+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+

+-- 提交悬赏任务表

+CREATE TABLE `SubmitSeed` (

+  `beg_id` VARCHAR(64) NOT NULL,

+  `seed_id` VARCHAR(64) NOT NULL,

+  `votes` INT NOT NULL DEFAULT 0,

+  PRIMARY KEY (`beg_id`,`seed_id`),

+  CONSTRAINT `fk_ss_beg` FOREIGN KEY (`beg_id`) REFERENCES `BegSeed`(`beg_id`) ON DELETE CASCADE,

+  CONSTRAINT `fk_ss_seed` FOREIGN KEY (`seed_id`) REFERENCES `Seed`(`seed_id`) ON DELETE CASCADE

+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+

+-- 帖子表

+CREATE TABLE `Post` (

+  `post_id` VARCHAR(64) NOT NULL,

+  `title` VARCHAR(255) NOT NULL,

+  `content` TEXT NOT NULL,

+  `author_id` VARCHAR(36) NOT NULL,

+  `created_at` DATETIME NOT NULL,

+  `reply_count` INT NOT NULL DEFAULT 0,

+  `view_count` INT NOT NULL DEFAULT 0,

+  PRIMARY KEY (`post_id`),

+  CONSTRAINT `fk_post_user` FOREIGN KEY (`author_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE

+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+

+-- 帖子回复表

+CREATE TABLE `PostReply` (

+  `reply_id` VARCHAR(64) NOT NULL,

+  `post_id` VARCHAR(64) NOT NULL,

+  `content` TEXT NOT NULL,

+  `author_id` VARCHAR(36) NOT NULL,

+  `created_at` DATETIME NOT NULL,

+  PRIMARY KEY (`reply_id`),

+  CONSTRAINT `fk_pr_post` FOREIGN KEY (`post_id`) REFERENCES `Post`(`post_id`) ON DELETE CASCADE,

+  CONSTRAINT `fk_pr_user` FOREIGN KEY (`author_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE

+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+

+-- 公告表

+CREATE TABLE `Announcement` (

+  `announce_id` VARCHAR(64) NOT NULL,

+  `content` TEXT NOT NULL,

+  `is_public` TINYINT(1) NOT NULL DEFAULT 0,

+  `tag` VARCHAR(100) DEFAULT NULL,

+  PRIMARY KEY (`announce_id`)

+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+

+-- 用户收藏夹表

+CREATE TABLE `UserFavorite` (

+  `user_id` VARCHAR(36) NOT NULL,

+  `seed_id` VARCHAR(64) NOT NULL,

+  PRIMARY KEY (`user_id`,`seed_id`),

+  CONSTRAINT `fk_uf_user` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE,

+  CONSTRAINT `fk_uf_seed` FOREIGN KEY (`seed_id`) REFERENCES `Seed`(`seed_id`) ON DELETE CASCADE

+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+

+-- 用户迁移表

+CREATE TABLE `UserMigration` (

+  `migration_id` VARCHAR(64) NOT NULL,

+  `user_id` VARCHAR(36) NOT NULL,

+  `application_url` VARCHAR(255) NOT NULL,

+  `approved` TINYINT(1) NOT NULL DEFAULT 0,

+  `pending_magic` INT NOT NULL DEFAULT 0,

+  `granted_magic` INT NOT NULL DEFAULT 0,

+  `pending_uploaded` BIGINT NOT NULL DEFAULT 0,

+  `granted_uploaded` BIGINT NOT NULL DEFAULT 0,

+  PRIMARY KEY (`migration_id`),

+  CONSTRAINT `fk_um_user` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE

+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+

+```

+

diff --git "a/\345\274\200\345\217\221\346\226\207\346\241\243/create.sql" "b/\345\274\200\345\217\221\346\226\207\346\241\243/create.sql"
new file mode 100644
index 0000000..b5daae4
--- /dev/null
+++ "b/\345\274\200\345\217\221\346\226\207\346\241\243/create.sql"
@@ -0,0 +1,171 @@
+-- 用户表
+CREATE TABLE `User` (
+  `user_id` VARCHAR(36) NOT NULL,
+  `email` VARCHAR(255) NOT NULL,
+  `username` VARCHAR(100) NOT NULL,
+  `password` VARCHAR(255) NOT NULL,
+  `gender` ENUM('m','f') NOT NULL,
+  `school` VARCHAR(255) DEFAULT NULL,
+  `avatar_url` VARCHAR(255) DEFAULT NULL,
+  `bio` TEXT,
+  `account_status` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0=正常,1=被ban',
+  `invite_left` INT NOT NULL DEFAULT 0,
+  PRIMARY KEY (`user_id`,`email`),
+  UNIQUE KEY `uniq_email` (`email`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 用户邀请表
+CREATE TABLE `UserInvite` (
+  `user_id` VARCHAR(36) NOT NULL,
+  `inviter_email` VARCHAR(255) NOT NULL,
+  `inviter_registered` TINYINT(1) NOT NULL DEFAULT 0,
+  PRIMARY KEY (`user_id`,`inviter_email`),
+  CONSTRAINT `fk_ui_user` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 用户 PT 信息表
+CREATE TABLE `UserPT` (
+  `user_id` VARCHAR(36) NOT NULL,
+  `magic` INT NOT NULL DEFAULT 0,
+  `uploaded` BIGINT NOT NULL DEFAULT 0,
+  `downloaded` BIGINT NOT NULL DEFAULT 0,
+  `ratio` DECIMAL(5,2) NOT NULL DEFAULT 0.00,
+  `default_seed_path` VARCHAR(255) DEFAULT NULL,
+  `vip_downloads` INT NOT NULL DEFAULT 0,
+  PRIMARY KEY (`user_id`),
+  CONSTRAINT `fk_pt_user` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 种子表
+CREATE TABLE `Seed` (
+  `seed_id` VARCHAR(64) NOT NULL,
+  `owner_user_id` VARCHAR(36) NOT NULL,
+  `fake_hits` INT NOT NULL DEFAULT 0,
+  `last_fake_check` DATETIME DEFAULT NULL,
+  `external_url` VARCHAR(255) DEFAULT NULL,
+  `title` VARCHAR(255) NOT NULL,
+  `subtitle` VARCHAR(255) DEFAULT NULL,
+  `size` VARCHAR(50) NOT NULL,
+  `tags` VARCHAR(255) DEFAULT NULL,
+  `popularity` INT NOT NULL DEFAULT 0,
+  PRIMARY KEY (`seed_id`),
+  CONSTRAINT `fk_seed_user` FOREIGN KEY (`owner_user_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 种子下载表
+CREATE TABLE `SeedDownload` (
+  `task_id` VARCHAR(64) NOT NULL,
+  `user_id` VARCHAR(36) NOT NULL,
+  `seed_id` VARCHAR(64) NOT NULL,
+  `download_start` DATETIME NOT NULL,
+  `download_end` DATETIME DEFAULT NULL,
+  `is_dedicated` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0=普通,1=专线',
+  `client_ip` VARCHAR(45) DEFAULT NULL,
+  PRIMARY KEY (`task_id`),
+  CONSTRAINT `fk_sd_user` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE,
+  CONSTRAINT `fk_sd_seed` FOREIGN KEY (`seed_id`) REFERENCES `Seed`(`seed_id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 缓存种子数据表
+CREATE TABLE `VipSeed` (
+  `seed_id` VARCHAR(64) NOT NULL,
+  `seeder_count` INT NOT NULL DEFAULT 0,
+  `reward_magic` INT NOT NULL DEFAULT 0,
+  `stop_caching` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0=继续缓存,1=不缓存',
+  PRIMARY KEY (`seed_id`),
+  CONSTRAINT `fk_vip_seed` FOREIGN KEY (`seed_id`) REFERENCES `Seed`(`seed_id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 传输信息表
+CREATE TABLE `Transport` (
+  `task_id` VARCHAR(64) NOT NULL,
+  `uploader_id` VARCHAR(36) NOT NULL,
+  `downloader_id` VARCHAR(36) NOT NULL,
+  `seed_id` VARCHAR(64) NOT NULL,
+  `uploaded` BIGINT NOT NULL DEFAULT 0,
+  `downloaded` BIGINT NOT NULL DEFAULT 0,
+  `upload_peak` BIGINT NOT NULL DEFAULT 0,
+  `download_peak` BIGINT NOT NULL DEFAULT 0,
+  PRIMARY KEY (`task_id`, `uploader_id`, `downloader_id`),
+  CONSTRAINT `fk_tr_user_up` FOREIGN KEY (`uploader_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE,
+  CONSTRAINT `fk_tr_user_down` FOREIGN KEY (`downloader_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE,
+  CONSTRAINT `fk_tr_seed` FOREIGN KEY (`seed_id`) REFERENCES `Seed`(`seed_id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 求种任务表
+CREATE TABLE `BegSeed` (
+  `beg_id` VARCHAR(64) NOT NULL,
+  `beg_count` INT NOT NULL DEFAULT 0,
+  `reward_magic` INT NOT NULL DEFAULT 0,
+  `deadline` DATETIME NOT NULL,
+  `has_match` TINYINT(1) NOT NULL DEFAULT 0,
+  PRIMARY KEY (`beg_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 提交悬赏任务表
+CREATE TABLE `SubmitSeed` (
+  `beg_id` VARCHAR(64) NOT NULL,
+  `seed_id` VARCHAR(64) NOT NULL,
+  `votes` INT NOT NULL DEFAULT 0,
+  PRIMARY KEY (`beg_id`,`seed_id`),
+  CONSTRAINT `fk_ss_beg` FOREIGN KEY (`beg_id`) REFERENCES `BegSeed`(`beg_id`) ON DELETE CASCADE,
+  CONSTRAINT `fk_ss_seed` FOREIGN KEY (`seed_id`) REFERENCES `Seed`(`seed_id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 帖子表
+CREATE TABLE `Post` (
+  `post_id` VARCHAR(64) NOT NULL,
+  `title` VARCHAR(255) NOT NULL,
+  `content` TEXT NOT NULL,
+  `author_id` VARCHAR(36) NOT NULL,
+  `created_at` DATETIME NOT NULL,
+  `reply_count` INT NOT NULL DEFAULT 0,
+  `view_count` INT NOT NULL DEFAULT 0,
+  PRIMARY KEY (`post_id`),
+  CONSTRAINT `fk_post_user` FOREIGN KEY (`author_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 帖子回复表
+CREATE TABLE `PostReply` (
+  `reply_id` VARCHAR(64) NOT NULL,
+  `post_id` VARCHAR(64) NOT NULL,
+  `content` TEXT NOT NULL,
+  `author_id` VARCHAR(36) NOT NULL,
+  `created_at` DATETIME NOT NULL,
+  PRIMARY KEY (`reply_id`),
+  CONSTRAINT `fk_pr_post` FOREIGN KEY (`post_id`) REFERENCES `Post`(`post_id`) ON DELETE CASCADE,
+  CONSTRAINT `fk_pr_user` FOREIGN KEY (`author_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 公告表
+CREATE TABLE `Announcement` (
+  `announce_id` VARCHAR(64) NOT NULL,
+  `content` TEXT NOT NULL,
+  `is_public` TINYINT(1) NOT NULL DEFAULT 0,
+  `tag` VARCHAR(100) DEFAULT NULL,
+  PRIMARY KEY (`announce_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 用户收藏夹表
+CREATE TABLE `UserFavorite` (
+  `user_id` VARCHAR(36) NOT NULL,
+  `seed_id` VARCHAR(64) NOT NULL,
+  PRIMARY KEY (`user_id`,`seed_id`),
+  CONSTRAINT `fk_uf_user` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE,
+  CONSTRAINT `fk_uf_seed` FOREIGN KEY (`seed_id`) REFERENCES `Seed`(`seed_id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- 用户迁移表
+CREATE TABLE `UserMigration` (
+  `migration_id` VARCHAR(64) NOT NULL,
+  `user_id` VARCHAR(36) NOT NULL,
+  `application_url` VARCHAR(255) NOT NULL,
+  `approved` TINYINT(1) NOT NULL DEFAULT 0,
+  `pending_magic` INT NOT NULL DEFAULT 0,
+  `granted_magic` INT NOT NULL DEFAULT 0,
+  `pending_uploaded` BIGINT NOT NULL DEFAULT 0,
+  `granted_uploaded` BIGINT NOT NULL DEFAULT 0,
+  PRIMARY KEY (`migration_id`),
+  CONSTRAINT `fk_um_user` FOREIGN KEY (`user_id`) REFERENCES `User`(`user_id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+