论坛(回复功能),聊天室。后端完善
s

Change-Id: I60b1973a66d31e9284a33838b02ba0aea5f1d6e9
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index 58da333..0000000
--- a/Dockerfile
+++ /dev/null
@@ -1,26 +0,0 @@
-# Build stage
-#FROM registry.cn-hangzhou.aliyuncs.com/library/maven:3.8.4-openjdk-17 as build
-#WORKDIR /app
-
-FROM maven:3.8.4-openjdk-17 as build
-WORKDIR /app
-
-# Create .m2 directory and copy settings.xml
-#RUN mkdir -p /root/.m2
-#COPY settings.xml /root/.m2/settings.xml
-
-# Cache dependencies
-COPY pom.xml .
-RUN mvn dependency:go-offline -B
-
-# Build application
-COPY src ./src
-RUN mvn clean package -DskipTests
-
-# Production stage
-#FROM registry.cn-hangzhou.aliyuncs.com/library/openjdk:17-slim
-FROM openjdk:17-slim
-WORKDIR /app
-COPY --from=build /app/target/*.jar app.jar
-EXPOSE 8080
-ENTRYPOINT ["java", "-jar", "app.jar"] 
\ No newline at end of file
diff --git a/Postman_Collection.JSON b/Postman_Collection.JSON
deleted file mode 100644
index f1ae478..0000000
--- a/Postman_Collection.JSON
+++ /dev/null
@@ -1,453 +0,0 @@
-{

-  "info": {

-    "name": "PT站分享率功能完整测试",

-    "description": "测试PT站的分享率计算、下载权限检查和VIP自动升级功能",

-    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"

-  },

-  "variable": [

-    {

-      "key": "base_url",

-      "value": "http://localhost:8081/api",

-      "type": "string"

-    },

-    {

-      "key": "token",

-      "value": "",

-      "type": "string"

-    }

-  ],

-  "item": [

-    {

-      "name": "测试场景1: 分享率过低用户",

-      "item": [

-        {

-          "name": "1.1 登录低分享率用户",

-          "event": [

-            {

-              "listen": "test",

-              "script": {

-                "exec": [

-                  "pm.test('登录成功', function () {",

-                  "    pm.expect(pm.response.code).to.equal(200);",

-                  "});",

-                  "",

-                  "if (pm.response.code === 200) {",

-                  "    const response = pm.response.json();",

-                  "    if (response.tokenInfo && response.tokenInfo.tokenValue) {",

-                  "        pm.collectionVariables.set('token', response.tokenInfo.tokenValue);",

-                  "        console.log('Token saved:', response.tokenInfo.tokenValue);",

-                  "    }",

-                  "}"

-                ]

-              }

-            }

-          ],

-          "request": {

-            "method": "POST",

-            "header": [

-              {

-                "key": "Content-Type",

-                "value": "application/json"

-              }

-            ],

-            "body": {

-              "mode": "raw",

-              "raw": "{\n  \"user\": \"你的测试用户名1\",\n  \"password\": \"你的密码\"\n}"

-            },

-            "url": {

-              "raw": "{{base_url}}/auth/login",

-              "host": ["{{base_url}}"],

-              "path": ["auth", "login"]

-            }

-          }

-        },

-        {

-          "name": "1.2 查看分享率信息",

-          "event": [

-            {

-              "listen": "test",

-              "script": {

-                "exec": [

-                  "pm.test('获取分享率信息成功', function () {",

-                  "    pm.expect(pm.response.code).to.equal(200);",

-                  "});",

-                  "",

-                  "const response = pm.response.json();",

-                  "console.log('分享率信息:', JSON.stringify(response, null, 2));",

-                  "",

-                  "pm.test('分享率过低', function () {",

-                  "    pm.expect(response.shareRatio).to.be.below(0.3);",

-                  "});",

-                  "",

-                  "pm.test('不能下载', function () {",

-                  "    pm.expect(response.canDownload).to.be.false;",

-                  "});",

-                  "",

-                  "pm.test('不是VIP用户', function () {",

-                  "    pm.expect(response.isVip).to.be.false;",

-                  "});"

-                ]

-              }

-            }

-          ],

-          "request": {

-            "method": "GET",

-            "header": [

-              {

-                "key": "sapling-token",

-                "value": "{{token}}"

-              }

-            ],

-            "url": {

-              "raw": "{{base_url}}/torrent/ratio/info",

-              "host": ["{{base_url}}"],

-              "path": ["torrent", "ratio", "info"]

-            }

-          }

-        },

-        {

-          "name": "1.3 尝试下载种子(应该被拒绝)",

-          "event": [

-            {

-              "listen": "test",

-              "script": {

-                "exec": [

-                  "pm.test('下载被拒绝', function () {",

-                  "    pm.expect(pm.response.code).to.equal(403);",

-                  "});",

-                  "",

-                  "const response = pm.response.json();",

-                  "console.log('下载拒绝信息:', JSON.stringify(response, null, 2));",

-                  "",

-                  "pm.test('返回正确的错误信息', function () {",

-                  "    pm.expect(response.error).to.equal('下载权限不足');",

-                  "    pm.expect(response.currentRatio).to.be.below(0.3);",

-                  "    pm.expect(response.requiredRatio).to.equal(0.3);",

-                  "});"

-                ]

-              }

-            }

-          ],

-          "request": {

-            "method": "GET",

-            "header": [

-              {

-                "key": "sapling-token",

-                "value": "{{token}}"

-              }

-            ],

-            "url": {

-              "raw": "{{base_url}}/torrent/download/1",

-              "host": ["{{base_url}}"],

-              "path": ["torrent", "download", "1"]

-            }

-          }

-        }

-      ]

-    },

-    {

-      "name": "测试场景2: 正常分享率用户",

-      "item": [

-        {

-          "name": "2.1 登录正常用户",

-          "event": [

-            {

-              "listen": "test",

-              "script": {

-                "exec": [

-                  "pm.test('登录成功', function () {",

-                  "    pm.expect(pm.response.code).to.equal(200);",

-                  "});",

-                  "",

-                  "if (pm.response.code === 200) {",

-                  "    const response = pm.response.json();",

-                  "    if (response.tokenInfo && response.tokenInfo.tokenValue) {",

-                  "        pm.collectionVariables.set('token', response.tokenInfo.tokenValue);",

-                  "    }",

-                  "}"

-                ]

-              }

-            }

-          ],

-          "request": {

-            "method": "POST",

-            "header": [

-              {

-                "key": "Content-Type",

-                "value": "application/json"

-              }

-            ],

-            "body": {

-              "mode": "raw",

-              "raw": "{\n  \"user\": \"你的测试用户名2\",\n  \"password\": \"你的密码\"\n}"

-            },

-            "url": {

-              "raw": "{{base_url}}/auth/login",

-              "host": ["{{base_url}}"],

-              "path": ["auth", "login"]

-            }

-          }

-        },

-        {

-          "name": "2.2 查看分享率信息",

-          "event": [

-            {

-              "listen": "test",

-              "script": {

-                "exec": [

-                  "const response = pm.response.json();",

-                  "console.log('正常用户分享率信息:', JSON.stringify(response, null, 2));",

-                  "",

-                  "pm.test('分享率正常', function () {",

-                  "    pm.expect(response.shareRatio).to.be.at.least(0.3);",

-                  "    pm.expect(response.shareRatio).to.be.below(2.0);",

-                  "});",

-                  "",

-                  "pm.test('可以下载', function () {",

-                  "    pm.expect(response.canDownload).to.be.true;",

-                  "});",

-                  "",

-                  "pm.test('还不是VIP用户', function () {",

-                  "    pm.expect(response.isVip).to.be.false;",

-                  "});"

-                ]

-              }

-            }

-          ],

-          "request": {

-            "method": "GET",

-            "header": [

-              {

-                "key": "sapling-token",

-                "value": "{{token}}"

-              }

-            ],

-            "url": {

-              "raw": "{{base_url}}/torrent/ratio/info",

-              "host": ["{{base_url}}"],

-              "path": ["torrent", "ratio", "info"]

-            }

-          }

-        },

-        {

-          "name": "2.3 下载种子(应该成功)",

-          "event": [

-            {

-              "listen": "test",

-              "script": {

-                "exec": [

-                  "pm.test('下载成功或种子不存在', function () {",

-                  "    // 如果种子存在,应该返回200和二进制数据",

-                  "    // 如果种子不存在,返回404",

-                  "    pm.expect([200, 404]).to.include(pm.response.code);",

-                  "});",

-                  "",

-                  "if (pm.response.code === 200) {",

-                  "    pm.test('返回种子文件', function () {",

-                  "        pm.expect(pm.response.headers.get('Content-Type')).to.equal('application/octet-stream');",

-                  "    });",

-                  "    console.log('种子下载成功');",

-                  "} else if (pm.response.code === 404) {",

-                  "    console.log('种子不存在,但下载权限检查通过');",

-                  "}"

-                ]

-              }

-            }

-          ],

-          "request": {

-            "method": "GET",

-            "header": [

-              {

-                "key": "sapling-token",

-                "value": "{{token}}"

-              }

-            ],

-            "url": {

-              "raw": "{{base_url}}/torrent/download/1",

-              "host": ["{{base_url}}"],

-              "path": ["torrent", "download", "1"]

-            }

-          }

-        }

-      ]

-    },

-    {

-      "name": "测试场景3: 高分享率用户自动升级VIP",

-      "item": [

-        {

-          "name": "3.1 登录高分享率用户",

-          "event": [

-            {

-              "listen": "test",

-              "script": {

-                "exec": [

-                  "pm.test('登录成功', function () {",

-                  "    pm.expect(pm.response.code).to.equal(200);",

-                  "});",

-                  "",

-                  "if (pm.response.code === 200) {",

-                  "    const response = pm.response.json();",

-                  "    if (response.tokenInfo && response.tokenInfo.tokenValue) {",

-                  "        pm.collectionVariables.set('token', response.tokenInfo.tokenValue);",

-                  "    }",

-                  "}"

-                ]

-              }

-            }

-          ],

-          "request": {

-            "method": "POST",

-            "header": [

-              {

-                "key": "Content-Type",

-                "value": "application/json"

-              }

-            ],

-            "body": {

-              "mode": "raw",

-              "raw": "{\n  \"user\": \"你的测试用户名3\",\n  \"password\": \"你的密码\"\n}"

-            },

-            "url": {

-              "raw": "{{base_url}}/auth/login",

-              "host": ["{{base_url}}"],

-              "path": ["auth", "login"]

-            }

-          }

-        },

-        {

-          "name": "3.2 查看升级前分享率信息",

-          "event": [

-            {

-              "listen": "test",

-              "script": {

-                "exec": [

-                  "const response = pm.response.json();",

-                  "console.log('升级前分享率信息:', JSON.stringify(response, null, 2));",

-                  "",

-                  "pm.test('分享率很高', function () {",

-                  "    pm.expect(response.shareRatio).to.be.at.least(2.0);",

-                  "});",

-                  "",

-                  "// 记录升级前状态",

-                  "pm.collectionVariables.set('beforeUpgradeIsVip', response.isVip);"

-                ]

-              }

-            }

-          ],

-          "request": {

-            "method": "GET",

-            "header": [

-              {

-                "key": "sapling-token",

-                "value": "{{token}}"

-              }

-            ],

-            "url": {

-              "raw": "{{base_url}}/torrent/ratio/info",

-              "host": ["{{base_url}}"],

-              "path": ["torrent", "ratio", "info"]

-            }

-          }

-        },

-        {

-          "name": "3.3 触发VIP检查(下载种子)",

-          "event": [

-            {

-              "listen": "test",

-              "script": {

-                "exec": [

-                  "// 这个请求主要是触发ShareRatioService.checkAndUpdateVipStatus",

-                  "console.log('触发VIP状态检查,响应码:', pm.response.code);"

-                ]

-              }

-            }

-          ],

-          "request": {

-            "method": "GET",

-            "header": [

-              {

-                "key": "sapling-token",

-                "value": "{{token}}"

-              }

-            ],

-            "url": {

-              "raw": "{{base_url}}/torrent/download/1",

-              "host": ["{{base_url}}"],

-              "path": ["torrent", "download", "1"]

-            }

-          }

-        },

-        {

-          "name": "3.4 验证VIP升级结果",

-          "event": [

-            {

-              "listen": "test",

-              "script": {

-                "exec": [

-                  "const response = pm.response.json();",

-                  "console.log('升级后分享率信息:', JSON.stringify(response, null, 2));",

-                  "",

-                  "pm.test('已升级为VIP', function () {",

-                  "    pm.expect(response.isVip).to.be.true;",

-                  "});",

-                  "",

-                  "pm.test('VIP用户可以下载', function () {",

-                  "    pm.expect(response.canDownload).to.be.true;",

-                  "});",

-                  "",

-                  "pm.test('用户组显示为VIP', function () {",

-                  "    pm.expect(response.groupName).to.include('VIP');",

-                  "});"

-                ]

-              }

-            }

-          ],

-          "request": {

-            "method": "GET",

-            "header": [

-              {

-                "key": "sapling-token",

-                "value": "{{token}}"

-              }

-            ],

-            "url": {

-              "raw": "{{base_url}}/torrent/ratio/info",

-              "host": ["{{base_url}}"],

-              "path": ["torrent", "ratio", "info"]

-            }

-          }

-        }

-      ]

-    },

-    {

-      "name": "测试场景4: 数据库验证",

-      "item": [

-        {

-          "name": "4.1 验证数据库中的group_id变化",

-          "event": [

-            {

-              "listen": "test",

-              "script": {

-                "exec": [

-                  "// 这是一个提示性的测试项",

-                  "// 实际验证需要在数据库中执行SQL查询",

-                  "console.log('请在数据库中执行以下SQL来验证group_id变化:');",

-                  "console.log('SELECT id, username, uploaded, downloaded, group_id, ROUND(uploaded/downloaded, 3) as share_ratio FROM users WHERE id IN (1,2,3,4);');"

-                ]

-              }

-            }

-          ],

-          "request": {

-            "method": "GET",

-            "header": [],

-            "url": {

-              "raw": "{{base_url}}/auth/status",

-              "host": ["{{base_url}}"],

-              "path": ["auth", "status"]

-            }

-          }

-        }

-      ]

-    }

-  ]

-}
\ No newline at end of file
diff --git a/public/torrents/1ac0431647b6391733d2ad470e307d57d41b6dd2.torrent b/public/torrents/1ac0431647b6391733d2ad470e307d57d41b6dd2.torrent
deleted file mode 100644
index 6fcda4d..0000000
--- a/public/torrents/1ac0431647b6391733d2ad470e307d57d41b6dd2.torrent
+++ /dev/null
Binary files differ
diff --git a/public/torrents/62b376114e5fd75d86696e4f72a9d87e923d08fa.torrent b/public/torrents/62b376114e5fd75d86696e4f72a9d87e923d08fa.torrent
deleted file mode 100644
index 1b3fe60..0000000
--- a/public/torrents/62b376114e5fd75d86696e4f72a9d87e923d08fa.torrent
+++ /dev/null
Binary files differ
diff --git a/public/torrents/86abb21e4d87f2ed8a4735d059555b31209fb588.torrent b/public/torrents/86abb21e4d87f2ed8a4735d059555b31209fb588.torrent
deleted file mode 100644
index bea48e6..0000000
--- a/public/torrents/86abb21e4d87f2ed8a4735d059555b31209fb588.torrent
+++ /dev/null
Binary files differ
diff --git a/public/torrents/ebd068cd030eca8a041f5099bfda374b3a607ca2.torrent b/public/torrents/ebd068cd030eca8a041f5099bfda374b3a607ca2.torrent
deleted file mode 100644
index 98fd81d..0000000
--- a/public/torrents/ebd068cd030eca8a041f5099bfda374b3a607ca2.torrent
+++ /dev/null
Binary files differ
diff --git a/public/torrents/f4ca53495ac5c7222806c4b0264dda2e42e137d5.torrent b/public/torrents/f4ca53495ac5c7222806c4b0264dda2e42e137d5.torrent
deleted file mode 100644
index 64eac95..0000000
--- a/public/torrents/f4ca53495ac5c7222806c4b0264dda2e42e137d5.torrent
+++ /dev/null
@@ -1 +0,0 @@
-d8:announce32:http://172.21.8.94:6969/announce10:created by18:qBittorrent v5.1.013:creation datei1748927545e4:infod6:lengthi102880e4:name31:Weixin Image_20240419002938.jpg12:piece lengthi16384e6:pieces140:þnÃI •o…?Ð3ëØDwÌ—kÅ缇Ȧè<ªKÑ 51ǘþ¬,hÞ·Ù(_\!À&ªXóæ­2”-Ÿc㧬K[!ÿy6¬©W3®).z9ŒˆåÔ¨Tü%	’žpêQa˜:J}‰9Ð0‘‚œ½Á\N(5…½›ZR7K¹°©ÆÆÉšÖwÖ7:privatei1ee15:publish-website20:Another Sapling Site9:publisher5:admin13:publisher-url31:http://172.23.192.1:8081/user/2e
\ No newline at end of file
diff --git a/settings.xml b/settings.xml
deleted file mode 100644
index 6dab700..0000000
--- a/settings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"

-          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

-          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

-    <mirrors>

-        <mirror>

-            <id>aliyunmaven</id>

-            <mirrorOf>*</mirrorOf>

-            <name>阿里云公共仓库</name>

-            <url>https://maven.aliyun.com/repository/public</url>

-        </mirror>

-    </mirrors>

-</settings> 
\ No newline at end of file
diff --git a/src/main/java/com/github/example/pt/autoconfig/SaTokenConfig.java b/src/main/java/com/github/example/pt/autoconfig/SaTokenConfig.java
index 7259e1e..81968f7 100644
--- a/src/main/java/com/github/example/pt/autoconfig/SaTokenConfig.java
+++ b/src/main/java/com/github/example/pt/autoconfig/SaTokenConfig.java
@@ -2,8 +2,10 @@
 
 import cn.dev33.satoken.interceptor.SaInterceptor;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
 @Configuration
 public class SaTokenConfig implements WebMvcConfigurer {
     @Override
@@ -14,4 +16,15 @@
                 .excludePathPatterns("/auth/**")
                 .excludePathPatterns("/torrent/download/**");
     }
+
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**")
+                .allowedOrigins("http://localhost:8080", "http://127.0.0.1:8080")
+                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
+                .allowedHeaders("*")
+                .allowCredentials(true)
+                .exposedHeaders("sapling-token")
+                .maxAge(3600);
+    }
 }
diff --git a/src/main/java/com/github/example/pt/config/SaTokenHandshakeInterceptor.java b/src/main/java/com/github/example/pt/config/SaTokenHandshakeInterceptor.java
index 5826c6d..69b8afd 100644
--- a/src/main/java/com/github/example/pt/config/SaTokenHandshakeInterceptor.java
+++ b/src/main/java/com/github/example/pt/config/SaTokenHandshakeInterceptor.java
@@ -1,6 +1,7 @@
 package com.github.example.pt.config;
 
 
+import jakarta.servlet.http.Cookie;
 import jakarta.servlet.http.HttpServletRequest;
 import org.springframework.http.server.ServerHttpRequest;
 import org.springframework.http.server.ServerHttpResponse;
@@ -20,7 +21,28 @@
 
         if (request instanceof ServletServerHttpRequest servletRequest) {
             HttpServletRequest httpServletRequest = servletRequest.getServletRequest();
+            
+            // 优先从请求头获取token
             String token = httpServletRequest.getHeader("sapling-token");
+            
+            // 如果请求头没有token,尝试从Cookie获取
+            if (token == null || token.trim().isEmpty()) {
+                Cookie[] cookies = httpServletRequest.getCookies();
+                if (cookies != null) {
+                    for (Cookie cookie : cookies) {
+                        if ("sapling-token".equals(cookie.getName())) {
+                            token = cookie.getValue();
+                            break;
+                        }
+                    }
+                }
+            }
+            
+            // 如果Cookie也没有token,尝试从URL参数获取
+            if (token == null || token.trim().isEmpty()) {
+                token = httpServletRequest.getParameter("token");
+            }
+            
             attributes.put("sapling-token", token); // ✅ 存入 sessionAttributes
         }
 
diff --git a/src/main/java/com/github/example/pt/controller/ForumController.java b/src/main/java/com/github/example/pt/controller/ForumController.java
index 3793e4d..1dd485f 100644
--- a/src/main/java/com/github/example/pt/controller/ForumController.java
+++ b/src/main/java/com/github/example/pt/controller/ForumController.java
@@ -1,10 +1,14 @@
 package com.github.example.pt.controller;
 
+import cn.dev33.satoken.stp.StpUtil;
 import com.github.example.pt.entity.Forum;
 import com.github.example.pt.entity.Topic;
+import com.github.example.pt.entity.User;
 import com.github.example.pt.service.ForumService;
+import com.github.example.pt.service.UserService;
 import org.hibernate.Session;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
@@ -17,6 +21,9 @@
     @Autowired
     private ForumService forumService;
 
+    @Autowired
+    private UserService userService;
+
     @GetMapping
     public List<Forum> getAllForums() {
         return forumService.getAllForums();
@@ -45,9 +52,24 @@
 
     @DeleteMapping("/{id}")
     public ResponseEntity<Void> deleteForum(@PathVariable Long id ) {
+        User user = userService.getUser(StpUtil.getLoginIdAsLong());;
 
-        forumService.deleteForum(id);
-        return ResponseEntity.noContent().build();
+
+
+        Forum forum = forumService.getForumById(id).orElseThrow(() -> new RuntimeException("forums not found"));
+        Long forumuserid = forum.getUser().getId();
+        if(user != null ){
+            Long userid = user.getId();
+
+            if (userid.equals(forumuserid)){
+                forumService.deleteForum(id);
+                return ResponseEntity.noContent().build();
+            }
+
+
+        }
+        return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
+
     }
 
 
diff --git a/src/main/java/com/github/example/pt/controller/PostController.java b/src/main/java/com/github/example/pt/controller/PostController.java
index 898a369..fad36ef 100644
--- a/src/main/java/com/github/example/pt/controller/PostController.java
+++ b/src/main/java/com/github/example/pt/controller/PostController.java
@@ -13,6 +13,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/api/posts")
@@ -27,8 +28,17 @@
     @Autowired
     private UserService UserService;
 
+    @GetMapping("/test")
+    public String test() {
+        return "Hello from PostController";
+    }
+
+
     @GetMapping("/topic/{topicId}")
     public ResponseEntity<List<Post>> getPostsByTopic(@PathVariable Long topicId) {
+
+        System.out.println("topicId: " + topicId + ", exists: " + topicService.getTopicById(topicId).isPresent());
+
         return topicService.getTopicById(topicId)
                 .map(topic -> ResponseEntity.ok(postService.getPostsByTopic(topic)))
                 .orElse(ResponseEntity.notFound().build());
@@ -47,8 +57,41 @@
     }
 
     @PostMapping
-    public Post createPost(@RequestBody Post post) {
-        return postService.createPost(post);
+
+    public ResponseEntity<Post> createPost(@RequestBody Map<String, Object> request) {
+        try {
+            Long topicId = Long.valueOf(request.get("topicId").toString());
+            String content = request.get("content").toString();
+            Long parentId = request.get("parentId") != null ? 
+                Long.valueOf(request.get("parentId").toString()) : null;
+            
+            // 获取当前登录用户
+            Long userId = StpUtil.getLoginIdAsLong();
+            User user = UserService.getUser(userId);
+            
+            // 获取主题
+            Topic topic = topicService.getTopicById(topicId)
+                    .orElseThrow(() -> new RuntimeException("Topic not found"));
+            
+            // 创建Post对象
+            Post post = new Post();
+            post.setContent(content);
+            post.setTopic(topic);
+            post.setUser(user);
+            
+            // 设置父帖子(如果是回复)
+            if (parentId != null) {
+                Post parentPost = postService.getPostById(parentId)
+                        .orElseThrow(() -> new RuntimeException("Parent post not found"));
+                post.setParent(parentPost);
+            }
+            
+            Post createdPost = postService.createPost(post);
+            return ResponseEntity.ok(createdPost);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
+        }
     }
 
     @PutMapping("/{id}")
diff --git a/src/main/java/com/github/example/pt/controller/TopicController.java b/src/main/java/com/github/example/pt/controller/TopicController.java
index 3b0d5f0..24d1d7a 100644
--- a/src/main/java/com/github/example/pt/controller/TopicController.java
+++ b/src/main/java/com/github/example/pt/controller/TopicController.java
@@ -1,9 +1,12 @@
 package com.github.example.pt.controller;
 
 import cn.dev33.satoken.stp.StpUtil;
+import com.github.example.pt.entity.Forum;
+import com.github.example.pt.entity.Post;
 import com.github.example.pt.entity.Topic;
 import com.github.example.pt.entity.User;
 import com.github.example.pt.service.ForumService;
+import com.github.example.pt.service.PostService;
 import com.github.example.pt.service.TopicService;
 import com.github.example.pt.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -12,6 +15,8 @@
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Map;
+
 import java.util.List;
 
 @RestController
@@ -25,6 +30,9 @@
     private ForumService forumService;
 
     @Autowired
+    private PostService postService;
+
+    @Autowired
     private UserService UserService;
 
     @GetMapping
@@ -47,8 +55,49 @@
     }
 
     @PostMapping
-    public Topic createTopic(@RequestBody Topic topic) {
-        return topicService.createTopic(topic);
+    public ResponseEntity<Topic> createTopic(@RequestBody Map<String, Object> request) {
+        try {
+            // 获取当前登录用户
+            Long userId = StpUtil.getLoginIdAsLong();
+            User user = UserService.getUser(userId);
+            
+            // 获取请求参数
+            String title = request.get("title").toString();
+            String content = request.get("content").toString();
+            Long forumId = Long.valueOf(request.get("forumId").toString());
+            Boolean isPinned = (Boolean) request.getOrDefault("isPinned", false);
+            Boolean isLocked = (Boolean) request.getOrDefault("isLocked", false);
+            
+            // 获取论坛
+            Forum forum = forumService.getForumById(forumId)
+                    .orElseThrow(() -> new RuntimeException("Forum not found"));
+            
+            // 创建Topic
+            Topic topic = Topic.builder()
+                    .title(title)
+                    .forum(forum)
+                    .user(user)
+                    .isPinned(isPinned)
+                    .isLocked(isLocked)
+                    .build();
+            
+            Topic createdTopic = topicService.createTopic(topic);
+            
+            // 创建主帖内容(第一个Post)
+            Post mainPost = Post.builder()
+                    .content(content)
+                    .topic(createdTopic)
+                    .user(user)
+                    .parent(null)
+                    .build();
+            
+            postService.createPost(mainPost);
+            
+            return ResponseEntity.ok(createdTopic);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
+        }
     }
 
     @PutMapping("/{id}")
diff --git a/src/main/java/com/github/example/pt/controller/auth/AuthController.java b/src/main/java/com/github/example/pt/controller/auth/AuthController.java
index 582dc0b..1a7c2ee 100644
--- a/src/main/java/com/github/example/pt/controller/auth/AuthController.java
+++ b/src/main/java/com/github/example/pt/controller/auth/AuthController.java
@@ -154,78 +154,6 @@
         return getUserBasicInformation(user);
     }
 
-    /**
-     * 带邀请码注册接口
-     */
-    @PostMapping("/registerWithInvite")
-    @Transactional
-    public UserSessionResponseDTO registerWithInvite(@RequestBody RegisterRequestDTO register) {
-
-        if (StringUtils.isEmpty(register.getEmail())) {
-            throw new APIGenericException(MISSING_PARAMETERS, "Email parameter is required");
-        }
-        if (StringUtils.isEmpty(register.getUsername())) {
-            throw new APIGenericException(MISSING_PARAMETERS, "Username parameter is required");
-        }
-        if (StringUtils.isEmpty(register.getPassword())) {
-            throw new APIGenericException(MISSING_PARAMETERS, "Password parameter is required");
-        }
-        if (StringUtils.isEmpty(register.getInviteCode())) {
-            throw new APIGenericException(MISSING_PARAMETERS, "Invite code is required");
-        }
-        String inviteCode = register.getInviteCode();
-        // 检查邀请码是否存在于某个用户的invite_slot字段
-        boolean valid = false;
-        User inviteUser = null;
-        for (User u : (Iterable<User>)userService.getAllUsers()) {
-            if (String.valueOf(u.getInviteSlot()).equals(inviteCode)) {
-                valid = true;
-                inviteUser = u;
-                break;
-            }
-        }
-        if (!valid) {
-            throw new APIGenericException(AUTHENTICATION_FAILED, "邀请码无效");
-        }
-        // 使用掉邀请码后,inviteUser的invite_slot置为0,seeding_time减去86400000
-        if (inviteUser != null) {
-            inviteUser.setInviteSlot(0);
-            long newSeedingTime = inviteUser.getSeedingTime() - 86400000L;
-            inviteUser.setSeedingTime(Math.max(newSeedingTime, 0));
-            userService.save(inviteUser);
-        }
-        User user = userService.getUserByUsername(register.getUsername());
-        if (user != null) {
-            throw new APIGenericException(APIErrorCode.USERNAME_ALREADY_IN_USAGE);
-        }
-        user = userService.getUserByEmail(register.getEmail());
-        if (user != null) {
-            throw new APIGenericException(APIErrorCode.EMAIL_ALREADY_IN_USAGE);
-        }
-        user = userService.save(new User(
-                0,
-                register.getEmail(),
-                PasswordHash.hash(register.getPassword()),
-                register.getUsername(),
-                userGroupService.getUserGroup(1),
-                UUID.randomUUID().toString(),
-                Timestamp.from(Instant.now()),
-                "uploads/facivon.ico",
-                "测试用户",
-                "这个用户很懒,还没有个性签名",
-                "zh-CN",
-                "100mbps",
-                "100mbps",
-                0L, 0L, 0L, 0L,
-                "未知",
-                BigDecimal.ZERO,
-                0,
-                0L,
-                UUID.randomUUID().toString(), PrivacyLevel.LOW));
-        StpUtil.login(user.getId());
-        return getUserBasicInformation(user);
-    }
-
     @NotNull
     private UserSessionResponseDTO getUserBasicInformation(User user) {
         SaTokenInfo tokenInfo = null;
diff --git a/src/main/java/com/github/example/pt/controller/auth/dto/request/RegisterRequestDTO.java b/src/main/java/com/github/example/pt/controller/auth/dto/request/RegisterRequestDTO.java
index 8c61a10..3e6ad68 100644
--- a/src/main/java/com/github/example/pt/controller/auth/dto/request/RegisterRequestDTO.java
+++ b/src/main/java/com/github/example/pt/controller/auth/dto/request/RegisterRequestDTO.java
@@ -19,5 +19,4 @@
     @NotEmpty
     @Email
     private String email;
-    private String inviteCode;
 }
diff --git a/src/main/java/com/github/example/pt/entity/Forum.java b/src/main/java/com/github/example/pt/entity/Forum.java
index 174c3f0..2074ba3 100644
--- a/src/main/java/com/github/example/pt/entity/Forum.java
+++ b/src/main/java/com/github/example/pt/entity/Forum.java
@@ -36,6 +36,10 @@
     @Column(name = "sort_order")
     private Integer sortOrder;
 
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "user_id")
+    private User user;
+
     @Column(name = "is_locked")
     private Boolean isLocked = false;
 }
\ No newline at end of file
diff --git a/src/main/java/com/github/example/pt/entity/ForumTag.java b/src/main/java/com/github/example/pt/entity/ForumTag.java
index 5833906..64296ae 100644
--- a/src/main/java/com/github/example/pt/entity/ForumTag.java
+++ b/src/main/java/com/github/example/pt/entity/ForumTag.java
@@ -1,4 +1,5 @@
 package com.github.example.pt.entity;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import jakarta.persistence.*;
 import lombok.*;
 
@@ -23,5 +24,6 @@
     private String color;
 
     @ManyToMany(mappedBy = "tags")
+    @JsonIgnore
     private Set<Topic> topics;
 }
\ No newline at end of file
diff --git a/src/main/java/com/github/example/pt/entity/Post.java b/src/main/java/com/github/example/pt/entity/Post.java
index 8fcfb3c..5687b52 100644
--- a/src/main/java/com/github/example/pt/entity/Post.java
+++ b/src/main/java/com/github/example/pt/entity/Post.java
@@ -1,4 +1,6 @@
 package com.github.example.pt.entity;
+import com.fasterxml.jackson.annotation.JsonBackReference;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
 import jakarta.persistence.*;
 import lombok.*;
 
@@ -40,9 +42,11 @@
 
     @ManyToOne
     @JoinColumn(name = "parent_id")
+    @JsonBackReference
     private Post parent;
 
     @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
     @OrderBy("createdAt ASC")
+    @JsonManagedReference
     private List<Post> replies = new ArrayList<>();
 }
diff --git a/src/main/java/com/github/example/pt/service/UserService.java b/src/main/java/com/github/example/pt/service/UserService.java
index de6dd0a..830c717 100644
--- a/src/main/java/com/github/example/pt/service/UserService.java
+++ b/src/main/java/com/github/example/pt/service/UserService.java
@@ -5,10 +5,8 @@
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
 import java.util.Optional;
 
 @Service
@@ -56,49 +54,4 @@
     public Long getUserCount() {
         return repository.count();
     }
-
-    /**
-     * 如果用户seeding_time大于86400000,生成8位数字邀请码并写入invite_slot字段
-     * @param userId 用户ID
-     * @return 邀请码(8位数字),否则返回null
-     */
-    public Integer generateInviteCodeIfEligible(long userId) {
-        User user = getUser(userId);
-        if (user != null && user.getSeedingTime() > 86400000L) {
-            int code = (int)(Math.random() * 90000000) + 10000000; // 8位数字
-            user.setInviteSlot(code);
-            save(user);
-            return code;
-        }
-        return null;
-    }
-
-    /**
-     * 每2小时检查所有用户,满足条件则生成邀请码
-     */
-    @Scheduled(fixedRate = 2 * 60 * 60 * 1000) // 每2小时
-    public void checkAndGenerateInviteCodesForAllUsers() {
-        List<User> users = (List<User>) repository.findAll();
-        for (User user : users) {
-            if (user.getSeedingTime() > 86400000L) {
-                int inviteSlot = user.getInviteSlot();
-                String inviteStr = String.valueOf(inviteSlot);
-                if (inviteSlot == 0) {
-                    int code = (int)(Math.random() * 90000000) + 10000000;
-                    user.setInviteSlot(code);
-                    save(user);
-                } else if (inviteStr.length() == 8) {
-                    // 已有8位邀请码,跳过
-                    continue;
-                }
-            }
-        }
-    }
-
-    /**
-     * 获取所有用户
-     */
-    public Iterable<User> getAllUsers() {
-        return repository.findAll();
-    }
 }
diff --git a/src/main/resources/application-db.yml b/src/main/resources/application-db.yml
index 62f90f9..faf9438 100644
--- a/src/main/resources/application-db.yml
+++ b/src/main/resources/application-db.yml
@@ -10,4 +10,4 @@
     database-platform: org.hibernate.dialect.MySQL8Dialect
     show-sql: true
     properties:
-      hibernate.format_sql: true
\ No newline at end of file
+      hibernate.format_sql: true
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 21f409b..334ef90 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -33,6 +33,7 @@
     overwrite-existing-jobs: true
     jdbc:
       initialize-schema: always
+      platform: mysql
     properties:
       org:
         quartz:
@@ -46,11 +47,21 @@
             useProperties: false
             clusterCheckinInterval: 10000
             isClustered: true
+            dataSource: myDS
           threadPool:
             class: org.quartz.simpl.SimpleThreadPool
             threadCount: 10
             threadPriority: 5
             threadsInheritContextClassLoaderOfInitializingThread: true
+          dataSource:
+            myDS:
+              provider: hikaricp
+              driver: ${spring.datasource.driver-class-name}
+              URL: ${spring.datasource.url}
+              user: ${spring.datasource.username}
+              password: ${spring.datasource.password}
+              maxConnections: 5
+              validationQuery: select 1
   servlet:
     multipart:
       enabled: true
diff --git a/src/main/resources/ppt.sql b/src/main/resources/ppt.sql
index ad94e82..28ab119 100644
--- a/src/main/resources/ppt.sql
+++ b/src/main/resources/ppt.sql
@@ -724,7 +724,7 @@
 -- ----------------------------
 -- Records of users
 -- ----------------------------
-INSERT INTO `users` VALUES (1, 'testuser@example.com', '$2a$06$JqvHpC94mnN23uwmZX0XHeuyFj3M22Ikw8VBZRopfrlWbPfA4KREu', 'testuser', 1, '47050e8f-f3fd-4a9c-a828-0e0de456691f', '2025-06-03 11:34:08', 'https://www.baidu.com/facivon.ico', '测试用户', '这个用户很懒,还没有个性签名', 'zh-CN', '100mbps', '100mbps', 0, 27723388, 27723388, 0, '未知', 0.00, 0, 30790068, '948c9146-ff5f-4ad6-8ba5-d32e1209cafd', '0');
+INSERT INTO `users` VALUES (1, 'testuser@example.com', '$2a$06$JqvHpC94mnN23uwmZX0XHeuyFj3M22Ikw8VBZRopfrlWbPfA4KREu', 'testuser', 1, '47050e8f-f3fd-4a9c-a828-0e0de456691f', '2025-06-03 11:34:08', '/default-avatar.png', '测试用户', '这个用户很懒,还没有个性签名', 'zh-CN', '100mbps', '100mbps', 0, 27723388, 27723388, 0, '未知', 0.00, 0, 30790068, '948c9146-ff5f-4ad6-8ba5-d32e1209cafd', '0');
 
 SET FOREIGN_KEY_CHECKS = 1;
 
diff --git a/src/main/resources/test_basic_data.sql b/src/main/resources/test_basic_data.sql
new file mode 100644
index 0000000..cb3c279
--- /dev/null
+++ b/src/main/resources/test_basic_data.sql
@@ -0,0 +1,17 @@
+-- 插入测试用户(如果users表为空的话)
+INSERT IGNORE INTO users (id, username, email, password, created_at, updated_at) VALUES
+(1, 'testuser1', 'test1@example.com', '$2a$10$test.hash.password1', NOW(), NOW()),
+(2, 'testuser2', 'test2@example.com', '$2a$10$test.hash.password2', NOW(), NOW()),
+(3, 'testuser3', 'test3@example.com', '$2a$10$test.hash.password3', NOW(), NOW());
+
+-- 插入测试论坛版块(如果forums表为空的话)
+INSERT IGNORE INTO forums (id, slug, name, description, sort_order, is_locked) VALUES
+(1, 'general', '综合讨论区', '这里是综合讨论的地方,大家可以畅所欲言', 1, FALSE),
+(2, 'technical', '技术交流', '技术相关的讨论和分享', 2, FALSE),
+(3, 'announcements', '公告区', '站点公告和重要通知', 0, FALSE);
+
+-- 插入测试话题(如果topics表为空的话)
+INSERT IGNORE INTO topics (id, forum_id, user_id, title, is_pinned, is_locked, created_at, updated_at) VALUES
+(1, 1, 1, '欢迎来到综合讨论区', FALSE, FALSE, NOW(), NOW()),
+(2, 1, 2, '大家都在做什么项目?', FALSE, FALSE, NOW(), NOW()),
+(3, 2, 3, 'Spring Boot最佳实践分享', FALSE, FALSE, NOW(), NOW()); 
\ No newline at end of file
diff --git a/src/main/resources/test_posts_data.sql b/src/main/resources/test_posts_data.sql
new file mode 100644
index 0000000..4d331f1
--- /dev/null
+++ b/src/main/resources/test_posts_data.sql
@@ -0,0 +1,28 @@
+-- 测试数据:帖子和回复
+-- 假设已有用户ID 1, 2, 3 和话题ID 1
+
+-- 插入主帖(parent_id为NULL)
+INSERT INTO posts (topic_id, user_id, content, created_at, updated_at, is_deleted, parent_id) VALUES
+(1, 1, '这是话题1的第一个回复内容。大家觉得这个话题怎么样?', NOW(), NOW(), FALSE, NULL),
+(1, 2, '我觉得这个话题很有意思,值得深入讨论!', NOW(), NOW(), FALSE, NULL);
+
+-- 插入二级回复(回复第一个帖子,post_id=1)
+INSERT INTO posts (topic_id, user_id, content, created_at, updated_at, is_deleted, parent_id) VALUES
+(1, 3, '同意楼上的观点,这确实是个值得讨论的话题。', NOW(), NOW(), FALSE, 1),
+(1, 1, '谢谢大家的支持!我们继续深入讨论吧。', NOW(), NOW(), FALSE, 1);
+
+-- 插入三级回复(回复第一个二级回复,post_id=3)
+INSERT INTO posts (topic_id, user_id, content, created_at, updated_at, is_deleted, parent_id) VALUES
+(1, 2, '我有一些不同的看法,让我来分享一下...', NOW(), NOW(), FALSE, 3);
+
+-- 插入更多回复到第二个主帖(post_id=2)
+INSERT INTO posts (topic_id, user_id, content, created_at, updated_at, is_deleted, parent_id) VALUES
+(1, 3, '我也同意这个观点,补充一点...', NOW(), NOW(), FALSE, 2),
+(1, 1, '大家都说得很有道理!', NOW(), NOW(), FALSE, 2);
+
+-- 如果需要为其他话题添加数据,可以修改topic_id
+-- 为话题2添加一些测试数据
+INSERT INTO posts (topic_id, user_id, content, created_at, updated_at, is_deleted, parent_id) VALUES
+(2, 1, '这是话题2的第一个回复。', NOW(), NOW(), FALSE, NULL),
+(2, 2, '话题2看起来也很有趣!', NOW(), NOW(), FALSE, NULL),
+(2, 3, '我对话题2有些疑问...', NOW(), NOW(), FALSE, 1); -- 回复话题2的第一个帖子 
\ No newline at end of file
diff --git a/src/test/java/com/github/example/pt/ptApplicationTests.java b/src/test/java/com/github/example/pt/ptApplicationTests.java
index f5da35b..3122f61 100644
--- a/src/test/java/com/github/example/pt/ptApplicationTests.java
+++ b/src/test/java/com/github/example/pt/ptApplicationTests.java
@@ -1,9 +1,12 @@
 package com.github.example.pt;
+
 import org.junit.jupiter.api.Test;
+
 class ptApplicationTests {
+
     @Test
     void contextLoads() {
         // Basic check to ensure test framework runs
         System.out.println("Basic test passed.");
     }
-}
\ No newline at end of file
+}
diff --git a/target/classes/application-db.yml b/target/classes/application-db.yml
index 62f90f9..faf9438 100644
--- a/target/classes/application-db.yml
+++ b/target/classes/application-db.yml
@@ -10,4 +10,4 @@
     database-platform: org.hibernate.dialect.MySQL8Dialect
     show-sql: true
     properties:
-      hibernate.format_sql: true
\ No newline at end of file
+      hibernate.format_sql: true
diff --git a/target/classes/application.yml b/target/classes/application.yml
index 21f409b..334ef90 100644
--- a/target/classes/application.yml
+++ b/target/classes/application.yml
@@ -33,6 +33,7 @@
     overwrite-existing-jobs: true
     jdbc:
       initialize-schema: always
+      platform: mysql
     properties:
       org:
         quartz:
@@ -46,11 +47,21 @@
             useProperties: false
             clusterCheckinInterval: 10000
             isClustered: true
+            dataSource: myDS
           threadPool:
             class: org.quartz.simpl.SimpleThreadPool
             threadCount: 10
             threadPriority: 5
             threadsInheritContextClassLoaderOfInitializingThread: true
+          dataSource:
+            myDS:
+              provider: hikaricp
+              driver: ${spring.datasource.driver-class-name}
+              URL: ${spring.datasource.url}
+              user: ${spring.datasource.username}
+              password: ${spring.datasource.password}
+              maxConnections: 5
+              validationQuery: select 1
   servlet:
     multipart:
       enabled: true
diff --git a/target/classes/com/github/example/pt/autoconfig/QuartzConfig$AutowiringSpringBeanJobFactory.class b/target/classes/com/github/example/pt/autoconfig/QuartzConfig$AutowiringSpringBeanJobFactory.class
index 333d8ed..29f91eb 100644
--- a/target/classes/com/github/example/pt/autoconfig/QuartzConfig$AutowiringSpringBeanJobFactory.class
+++ b/target/classes/com/github/example/pt/autoconfig/QuartzConfig$AutowiringSpringBeanJobFactory.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/autoconfig/SaTokenConfig.class b/target/classes/com/github/example/pt/autoconfig/SaTokenConfig.class
index 9344339..32703fb 100644
--- a/target/classes/com/github/example/pt/autoconfig/SaTokenConfig.class
+++ b/target/classes/com/github/example/pt/autoconfig/SaTokenConfig.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/config/ApiPrinter.class b/target/classes/com/github/example/pt/config/ApiPrinter.class
index 9007cf5..7a08cda 100644
--- a/target/classes/com/github/example/pt/config/ApiPrinter.class
+++ b/target/classes/com/github/example/pt/config/ApiPrinter.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/config/MailConfig.class b/target/classes/com/github/example/pt/config/MailConfig.class
index 3091d5c..477c8d2 100644
--- a/target/classes/com/github/example/pt/config/MailConfig.class
+++ b/target/classes/com/github/example/pt/config/MailConfig.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/config/SaTokenHandshakeInterceptor.class b/target/classes/com/github/example/pt/config/SaTokenHandshakeInterceptor.class
index c65cf6a..d069934 100644
--- a/target/classes/com/github/example/pt/config/SaTokenHandshakeInterceptor.class
+++ b/target/classes/com/github/example/pt/config/SaTokenHandshakeInterceptor.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/config/SecurityConfig.class b/target/classes/com/github/example/pt/config/SecurityConfig.class
index 554fba6..de31309 100644
--- a/target/classes/com/github/example/pt/config/SecurityConfig.class
+++ b/target/classes/com/github/example/pt/config/SecurityConfig.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/config/SiteBasicConfig.class b/target/classes/com/github/example/pt/config/SiteBasicConfig.class
index bdd9c21..0c786e5 100644
--- a/target/classes/com/github/example/pt/config/SiteBasicConfig.class
+++ b/target/classes/com/github/example/pt/config/SiteBasicConfig.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/config/TrackerConfig.class b/target/classes/com/github/example/pt/config/TrackerConfig.class
index b059e69..38d6e3e 100644
--- a/target/classes/com/github/example/pt/config/TrackerConfig.class
+++ b/target/classes/com/github/example/pt/config/TrackerConfig.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/DebugController$DebugPeer.class b/target/classes/com/github/example/pt/controller/DebugController$DebugPeer.class
index 355d0c6..3cc2b50 100644
--- a/target/classes/com/github/example/pt/controller/DebugController$DebugPeer.class
+++ b/target/classes/com/github/example/pt/controller/DebugController$DebugPeer.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/DebugController$DebugTorrent.class b/target/classes/com/github/example/pt/controller/DebugController$DebugTorrent.class
index 22fc1b8..3727055 100644
--- a/target/classes/com/github/example/pt/controller/DebugController$DebugTorrent.class
+++ b/target/classes/com/github/example/pt/controller/DebugController$DebugTorrent.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/ForumController.class b/target/classes/com/github/example/pt/controller/ForumController.class
index ee618ba..5cd27b9 100644
--- a/target/classes/com/github/example/pt/controller/ForumController.class
+++ b/target/classes/com/github/example/pt/controller/ForumController.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/PostController.class b/target/classes/com/github/example/pt/controller/PostController.class
index 35314d2..17c45e7 100644
--- a/target/classes/com/github/example/pt/controller/PostController.class
+++ b/target/classes/com/github/example/pt/controller/PostController.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/TopicController.class b/target/classes/com/github/example/pt/controller/TopicController.class
index 6e5e49f..8a5c7a9 100644
--- a/target/classes/com/github/example/pt/controller/TopicController.class
+++ b/target/classes/com/github/example/pt/controller/TopicController.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/announce/AnnounceController$PeerResult.class b/target/classes/com/github/example/pt/controller/announce/AnnounceController$PeerResult.class
index 583be35..32f477b 100644
--- a/target/classes/com/github/example/pt/controller/announce/AnnounceController$PeerResult.class
+++ b/target/classes/com/github/example/pt/controller/announce/AnnounceController$PeerResult.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/announce/AnnounceController.class b/target/classes/com/github/example/pt/controller/announce/AnnounceController.class
index 8eb41fb..4c5e952 100644
--- a/target/classes/com/github/example/pt/controller/announce/AnnounceController.class
+++ b/target/classes/com/github/example/pt/controller/announce/AnnounceController.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/auth/AuthController.class b/target/classes/com/github/example/pt/controller/auth/AuthController.class
index d29cc4f..d6d5c51 100644
--- a/target/classes/com/github/example/pt/controller/auth/AuthController.class
+++ b/target/classes/com/github/example/pt/controller/auth/AuthController.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/auth/dto/request/RegisterRequestDTO.class b/target/classes/com/github/example/pt/controller/auth/dto/request/RegisterRequestDTO.class
index d633326..05fc197 100644
--- a/target/classes/com/github/example/pt/controller/auth/dto/request/RegisterRequestDTO.class
+++ b/target/classes/com/github/example/pt/controller/auth/dto/request/RegisterRequestDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/dto/response/CategoryResponseDTO.class b/target/classes/com/github/example/pt/controller/dto/response/CategoryResponseDTO.class
index 624efea..0f17497 100644
--- a/target/classes/com/github/example/pt/controller/dto/response/CategoryResponseDTO.class
+++ b/target/classes/com/github/example/pt/controller/dto/response/CategoryResponseDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/dto/response/LoginStatusResponseDTO.class b/target/classes/com/github/example/pt/controller/dto/response/LoginStatusResponseDTO.class
index 87095b5..696426a 100644
--- a/target/classes/com/github/example/pt/controller/dto/response/LoginStatusResponseDTO.class
+++ b/target/classes/com/github/example/pt/controller/dto/response/LoginStatusResponseDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/dto/response/PeerInfoResponseDTO.class b/target/classes/com/github/example/pt/controller/dto/response/PeerInfoResponseDTO.class
index 82db9c4..4d80273 100644
--- a/target/classes/com/github/example/pt/controller/dto/response/PeerInfoResponseDTO.class
+++ b/target/classes/com/github/example/pt/controller/dto/response/PeerInfoResponseDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/dto/response/TorrentInfoResponseDTO.class b/target/classes/com/github/example/pt/controller/dto/response/TorrentInfoResponseDTO.class
index 29afc9e..e88bb8e 100644
--- a/target/classes/com/github/example/pt/controller/dto/response/TorrentInfoResponseDTO.class
+++ b/target/classes/com/github/example/pt/controller/dto/response/TorrentInfoResponseDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/dto/response/TransferHistoryDTO.class b/target/classes/com/github/example/pt/controller/dto/response/TransferHistoryDTO.class
index fc8a3ab..c69cdb8 100644
--- a/target/classes/com/github/example/pt/controller/dto/response/TransferHistoryDTO.class
+++ b/target/classes/com/github/example/pt/controller/dto/response/TransferHistoryDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/dto/response/UserBasicResponseDTO.class b/target/classes/com/github/example/pt/controller/dto/response/UserBasicResponseDTO.class
index 50117e7..d68ecac 100644
--- a/target/classes/com/github/example/pt/controller/dto/response/UserBasicResponseDTO.class
+++ b/target/classes/com/github/example/pt/controller/dto/response/UserBasicResponseDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/dto/response/UserGroupResponseDTO.class b/target/classes/com/github/example/pt/controller/dto/response/UserGroupResponseDTO.class
index 8938bd6..24b37b8 100644
--- a/target/classes/com/github/example/pt/controller/dto/response/UserGroupResponseDTO.class
+++ b/target/classes/com/github/example/pt/controller/dto/response/UserGroupResponseDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/dto/response/UserResponseDTO.class b/target/classes/com/github/example/pt/controller/dto/response/UserResponseDTO.class
index c982c44..7eac134 100644
--- a/target/classes/com/github/example/pt/controller/dto/response/UserResponseDTO.class
+++ b/target/classes/com/github/example/pt/controller/dto/response/UserResponseDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/dto/response/UserSessionResponseDTO.class b/target/classes/com/github/example/pt/controller/dto/response/UserSessionResponseDTO.class
index 62d76fb..108bc97 100644
--- a/target/classes/com/github/example/pt/controller/dto/response/UserSessionResponseDTO.class
+++ b/target/classes/com/github/example/pt/controller/dto/response/UserSessionResponseDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/dto/response/UserTinyResponseDTO.class b/target/classes/com/github/example/pt/controller/dto/response/UserTinyResponseDTO.class
index 0a47108..b83d1bb 100644
--- a/target/classes/com/github/example/pt/controller/dto/response/UserTinyResponseDTO.class
+++ b/target/classes/com/github/example/pt/controller/dto/response/UserTinyResponseDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/torrent/TorrentController.class b/target/classes/com/github/example/pt/controller/torrent/TorrentController.class
index 42260e3..ddb7451 100644
--- a/target/classes/com/github/example/pt/controller/torrent/TorrentController.class
+++ b/target/classes/com/github/example/pt/controller/torrent/TorrentController.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/torrent/dto/request/SearchTorrentRequestDTO.class b/target/classes/com/github/example/pt/controller/torrent/dto/request/SearchTorrentRequestDTO.class
index c859017..b258072 100644
--- a/target/classes/com/github/example/pt/controller/torrent/dto/request/SearchTorrentRequestDTO.class
+++ b/target/classes/com/github/example/pt/controller/torrent/dto/request/SearchTorrentRequestDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/torrent/dto/request/ThanksResponseDTO.class b/target/classes/com/github/example/pt/controller/torrent/dto/request/ThanksResponseDTO.class
index cb052d5..c422e4f 100644
--- a/target/classes/com/github/example/pt/controller/torrent/dto/request/ThanksResponseDTO.class
+++ b/target/classes/com/github/example/pt/controller/torrent/dto/request/ThanksResponseDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/torrent/dto/request/TorrentScrapeRequestDTO.class b/target/classes/com/github/example/pt/controller/torrent/dto/request/TorrentScrapeRequestDTO.class
index 1becb2d..9a75417 100644
--- a/target/classes/com/github/example/pt/controller/torrent/dto/request/TorrentScrapeRequestDTO.class
+++ b/target/classes/com/github/example/pt/controller/torrent/dto/request/TorrentScrapeRequestDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/torrent/dto/response/TorrentScrapeResponseDTO.class b/target/classes/com/github/example/pt/controller/torrent/dto/response/TorrentScrapeResponseDTO.class
index 72ca36f..281050e 100644
--- a/target/classes/com/github/example/pt/controller/torrent/dto/response/TorrentScrapeResponseDTO.class
+++ b/target/classes/com/github/example/pt/controller/torrent/dto/response/TorrentScrapeResponseDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/torrent/dto/response/TorrentSearchResultResponseDTO.class b/target/classes/com/github/example/pt/controller/torrent/dto/response/TorrentSearchResultResponseDTO.class
index f3b6f7c..303f183 100644
--- a/target/classes/com/github/example/pt/controller/torrent/dto/response/TorrentSearchResultResponseDTO.class
+++ b/target/classes/com/github/example/pt/controller/torrent/dto/response/TorrentSearchResultResponseDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/torrent/dto/response/TorrentUploadSuccessResponseDTO.class b/target/classes/com/github/example/pt/controller/torrent/dto/response/TorrentUploadSuccessResponseDTO.class
index df5d002..2f33bef 100644
--- a/target/classes/com/github/example/pt/controller/torrent/dto/response/TorrentUploadSuccessResponseDTO.class
+++ b/target/classes/com/github/example/pt/controller/torrent/dto/response/TorrentUploadSuccessResponseDTO.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/controller/torrent/form/TorrentUploadForm.class b/target/classes/com/github/example/pt/controller/torrent/form/TorrentUploadForm.class
index c545ae5..eec863c 100644
--- a/target/classes/com/github/example/pt/controller/torrent/form/TorrentUploadForm.class
+++ b/target/classes/com/github/example/pt/controller/torrent/form/TorrentUploadForm.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/crontask/PeersCleanup.class b/target/classes/com/github/example/pt/crontask/PeersCleanup.class
index 924eda1..c80d93a 100644
--- a/target/classes/com/github/example/pt/crontask/PeersCleanup.class
+++ b/target/classes/com/github/example/pt/crontask/PeersCleanup.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/Exam.class b/target/classes/com/github/example/pt/entity/Exam.class
index 8473aba..131d382 100644
--- a/target/classes/com/github/example/pt/entity/Exam.class
+++ b/target/classes/com/github/example/pt/entity/Exam.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/Forum$ForumBuilder.class b/target/classes/com/github/example/pt/entity/Forum$ForumBuilder.class
index 9c8ecc3..7a15411 100644
--- a/target/classes/com/github/example/pt/entity/Forum$ForumBuilder.class
+++ b/target/classes/com/github/example/pt/entity/Forum$ForumBuilder.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/Forum.class b/target/classes/com/github/example/pt/entity/Forum.class
index cc02e3b..8b8adb2 100644
--- a/target/classes/com/github/example/pt/entity/Forum.class
+++ b/target/classes/com/github/example/pt/entity/Forum.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/ForumTag$ForumTagBuilder.class b/target/classes/com/github/example/pt/entity/ForumTag$ForumTagBuilder.class
index 38321ae..62e5b72 100644
--- a/target/classes/com/github/example/pt/entity/ForumTag$ForumTagBuilder.class
+++ b/target/classes/com/github/example/pt/entity/ForumTag$ForumTagBuilder.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/ForumTag.class b/target/classes/com/github/example/pt/entity/ForumTag.class
index e092880..08f8d75 100644
--- a/target/classes/com/github/example/pt/entity/ForumTag.class
+++ b/target/classes/com/github/example/pt/entity/ForumTag.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/LoginHistory.class b/target/classes/com/github/example/pt/entity/LoginHistory.class
index 0f6212a..8fc3721 100644
--- a/target/classes/com/github/example/pt/entity/LoginHistory.class
+++ b/target/classes/com/github/example/pt/entity/LoginHistory.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/Peer.class b/target/classes/com/github/example/pt/entity/Peer.class
index 3629440..181dbac 100644
--- a/target/classes/com/github/example/pt/entity/Peer.class
+++ b/target/classes/com/github/example/pt/entity/Peer.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/Post$PostBuilder.class b/target/classes/com/github/example/pt/entity/Post$PostBuilder.class
index 9eaec84..65ce88b 100644
--- a/target/classes/com/github/example/pt/entity/Post$PostBuilder.class
+++ b/target/classes/com/github/example/pt/entity/Post$PostBuilder.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/Post.class b/target/classes/com/github/example/pt/entity/Post.class
index 23eadd3..04451d7 100644
--- a/target/classes/com/github/example/pt/entity/Post.class
+++ b/target/classes/com/github/example/pt/entity/Post.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/PostLike$PostLikeBuilder.class b/target/classes/com/github/example/pt/entity/PostLike$PostLikeBuilder.class
index fe98d63..485b82f 100644
--- a/target/classes/com/github/example/pt/entity/PostLike$PostLikeBuilder.class
+++ b/target/classes/com/github/example/pt/entity/PostLike$PostLikeBuilder.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/PostLike.class b/target/classes/com/github/example/pt/entity/PostLike.class
index 9dada7e..903d6af 100644
--- a/target/classes/com/github/example/pt/entity/PostLike.class
+++ b/target/classes/com/github/example/pt/entity/PostLike.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/SeedBox.class b/target/classes/com/github/example/pt/entity/SeedBox.class
index 2f3ffe9..763691c 100644
--- a/target/classes/com/github/example/pt/entity/SeedBox.class
+++ b/target/classes/com/github/example/pt/entity/SeedBox.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/Thanks.class b/target/classes/com/github/example/pt/entity/Thanks.class
index 96c6e4b..95f9020 100644
--- a/target/classes/com/github/example/pt/entity/Thanks.class
+++ b/target/classes/com/github/example/pt/entity/Thanks.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/Topic$TopicBuilder.class b/target/classes/com/github/example/pt/entity/Topic$TopicBuilder.class
index ea91c3b..58cab6d 100644
--- a/target/classes/com/github/example/pt/entity/Topic$TopicBuilder.class
+++ b/target/classes/com/github/example/pt/entity/Topic$TopicBuilder.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/Topic.class b/target/classes/com/github/example/pt/entity/Topic.class
index 35f3c95..da6bbbc 100644
--- a/target/classes/com/github/example/pt/entity/Topic.class
+++ b/target/classes/com/github/example/pt/entity/Topic.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/TopicSubscription.class b/target/classes/com/github/example/pt/entity/TopicSubscription.class
index 2d709d1..0f6cc3a 100644
--- a/target/classes/com/github/example/pt/entity/TopicSubscription.class
+++ b/target/classes/com/github/example/pt/entity/TopicSubscription.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/TopicView.class b/target/classes/com/github/example/pt/entity/TopicView.class
index aca8526..0821d1f 100644
--- a/target/classes/com/github/example/pt/entity/TopicView.class
+++ b/target/classes/com/github/example/pt/entity/TopicView.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/Torrent.class b/target/classes/com/github/example/pt/entity/Torrent.class
index 3941ca1..b5cab29 100644
--- a/target/classes/com/github/example/pt/entity/Torrent.class
+++ b/target/classes/com/github/example/pt/entity/Torrent.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/TransferHistory.class b/target/classes/com/github/example/pt/entity/TransferHistory.class
index 82ef10c..5b7f155 100644
--- a/target/classes/com/github/example/pt/entity/TransferHistory.class
+++ b/target/classes/com/github/example/pt/entity/TransferHistory.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/User.class b/target/classes/com/github/example/pt/entity/User.class
index 4a30cc3..6748056 100644
--- a/target/classes/com/github/example/pt/entity/User.class
+++ b/target/classes/com/github/example/pt/entity/User.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/UserForumHistory$UserForumHistoryBuilder.class b/target/classes/com/github/example/pt/entity/UserForumHistory$UserForumHistoryBuilder.class
index cbf6dbd..26095cf 100644
--- a/target/classes/com/github/example/pt/entity/UserForumHistory$UserForumHistoryBuilder.class
+++ b/target/classes/com/github/example/pt/entity/UserForumHistory$UserForumHistoryBuilder.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/UserForumHistory.class b/target/classes/com/github/example/pt/entity/UserForumHistory.class
index 52179f7..cbe434a 100644
--- a/target/classes/com/github/example/pt/entity/UserForumHistory.class
+++ b/target/classes/com/github/example/pt/entity/UserForumHistory.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/entity/UserGroup.class b/target/classes/com/github/example/pt/entity/UserGroup.class
index 1b814cb..6e79055 100644
--- a/target/classes/com/github/example/pt/entity/UserGroup.class
+++ b/target/classes/com/github/example/pt/entity/UserGroup.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/exception/APIGenericException.class b/target/classes/com/github/example/pt/exception/APIGenericException.class
index e2856b8..79847d4 100644
--- a/target/classes/com/github/example/pt/exception/APIGenericException.class
+++ b/target/classes/com/github/example/pt/exception/APIGenericException.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/exception/FixedAnnounceException.class b/target/classes/com/github/example/pt/exception/FixedAnnounceException.class
index 33c9e79..1b8ab5f 100644
--- a/target/classes/com/github/example/pt/exception/FixedAnnounceException.class
+++ b/target/classes/com/github/example/pt/exception/FixedAnnounceException.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/exception/InvalidAnnounceException.class b/target/classes/com/github/example/pt/exception/InvalidAnnounceException.class
index 8e8a69a..0d147b2 100644
--- a/target/classes/com/github/example/pt/exception/InvalidAnnounceException.class
+++ b/target/classes/com/github/example/pt/exception/InvalidAnnounceException.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/exception/InvalidTorrentVerifyException.class b/target/classes/com/github/example/pt/exception/InvalidTorrentVerifyException.class
index 277775f..e8f45d2 100644
--- a/target/classes/com/github/example/pt/exception/InvalidTorrentVerifyException.class
+++ b/target/classes/com/github/example/pt/exception/InvalidTorrentVerifyException.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/exception/RetryableAnnounceException.class b/target/classes/com/github/example/pt/exception/RetryableAnnounceException.class
index 651b6e2..c64c060 100644
--- a/target/classes/com/github/example/pt/exception/RetryableAnnounceException.class
+++ b/target/classes/com/github/example/pt/exception/RetryableAnnounceException.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/AnnounceService$AnnounceTask.class b/target/classes/com/github/example/pt/service/AnnounceService$AnnounceTask.class
index 946336a..7bb7d5c 100644
--- a/target/classes/com/github/example/pt/service/AnnounceService$AnnounceTask.class
+++ b/target/classes/com/github/example/pt/service/AnnounceService$AnnounceTask.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/AnnounceService.class b/target/classes/com/github/example/pt/service/AnnounceService.class
index 74cfac1..5b5562a 100644
--- a/target/classes/com/github/example/pt/service/AnnounceService.class
+++ b/target/classes/com/github/example/pt/service/AnnounceService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/AuthenticationService.class b/target/classes/com/github/example/pt/service/AuthenticationService.class
index 4a351a3..deaef28 100644
--- a/target/classes/com/github/example/pt/service/AuthenticationService.class
+++ b/target/classes/com/github/example/pt/service/AuthenticationService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/BlacklistClientService.class b/target/classes/com/github/example/pt/service/BlacklistClientService.class
index b556e73..8514c94 100644
--- a/target/classes/com/github/example/pt/service/BlacklistClientService.class
+++ b/target/classes/com/github/example/pt/service/BlacklistClientService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/CategoryService.class b/target/classes/com/github/example/pt/service/CategoryService.class
index e8b2a8f..e241621 100644
--- a/target/classes/com/github/example/pt/service/CategoryService.class
+++ b/target/classes/com/github/example/pt/service/CategoryService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/ExamPlanService.class b/target/classes/com/github/example/pt/service/ExamPlanService.class
index 4bed8bb..f7dc083 100644
--- a/target/classes/com/github/example/pt/service/ExamPlanService.class
+++ b/target/classes/com/github/example/pt/service/ExamPlanService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/LoginHistoryService.class b/target/classes/com/github/example/pt/service/LoginHistoryService.class
index afb141f..d2cee3d 100644
--- a/target/classes/com/github/example/pt/service/LoginHistoryService.class
+++ b/target/classes/com/github/example/pt/service/LoginHistoryService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/PeerService.class b/target/classes/com/github/example/pt/service/PeerService.class
index 7c87eb8..40e8fa7 100644
--- a/target/classes/com/github/example/pt/service/PeerService.class
+++ b/target/classes/com/github/example/pt/service/PeerService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/PermissionService.class b/target/classes/com/github/example/pt/service/PermissionService.class
index f538c86..a7d6823 100644
--- a/target/classes/com/github/example/pt/service/PermissionService.class
+++ b/target/classes/com/github/example/pt/service/PermissionService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/PromotionService.class b/target/classes/com/github/example/pt/service/PromotionService.class
index c88ae88..512f454 100644
--- a/target/classes/com/github/example/pt/service/PromotionService.class
+++ b/target/classes/com/github/example/pt/service/PromotionService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/SettingService.class b/target/classes/com/github/example/pt/service/SettingService.class
index 60dfe1d..62595e4 100644
--- a/target/classes/com/github/example/pt/service/SettingService.class
+++ b/target/classes/com/github/example/pt/service/SettingService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/TagService.class b/target/classes/com/github/example/pt/service/TagService.class
index bc48eaf..251ab50 100644
--- a/target/classes/com/github/example/pt/service/TagService.class
+++ b/target/classes/com/github/example/pt/service/TagService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/TorrentService.class b/target/classes/com/github/example/pt/service/TorrentService.class
index 409eef9..6b2a693 100644
--- a/target/classes/com/github/example/pt/service/TorrentService.class
+++ b/target/classes/com/github/example/pt/service/TorrentService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/TransferHistoryService.class b/target/classes/com/github/example/pt/service/TransferHistoryService.class
index 0c05ee7..08df053 100644
--- a/target/classes/com/github/example/pt/service/TransferHistoryService.class
+++ b/target/classes/com/github/example/pt/service/TransferHistoryService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/UserGroupService.class b/target/classes/com/github/example/pt/service/UserGroupService.class
index c2b5b77..60d996c 100644
--- a/target/classes/com/github/example/pt/service/UserGroupService.class
+++ b/target/classes/com/github/example/pt/service/UserGroupService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/service/UserService.class b/target/classes/com/github/example/pt/service/UserService.class
index bd7145d..f706ebc 100644
--- a/target/classes/com/github/example/pt/service/UserService.class
+++ b/target/classes/com/github/example/pt/service/UserService.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/type/AnnounceEventType.class b/target/classes/com/github/example/pt/type/AnnounceEventType.class
index 1e8df5e..62dd62e 100644
--- a/target/classes/com/github/example/pt/type/AnnounceEventType.class
+++ b/target/classes/com/github/example/pt/type/AnnounceEventType.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/util/IPUtil.class b/target/classes/com/github/example/pt/util/IPUtil.class
index a68be73..dab2236 100644
--- a/target/classes/com/github/example/pt/util/IPUtil.class
+++ b/target/classes/com/github/example/pt/util/IPUtil.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/util/InfoHashUtil.class b/target/classes/com/github/example/pt/util/InfoHashUtil.class
index 916c74d..b18f975 100644
--- a/target/classes/com/github/example/pt/util/InfoHashUtil.class
+++ b/target/classes/com/github/example/pt/util/InfoHashUtil.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/util/PasswordHash.class b/target/classes/com/github/example/pt/util/PasswordHash.class
index 5443baf..4a8d67a 100644
--- a/target/classes/com/github/example/pt/util/PasswordHash.class
+++ b/target/classes/com/github/example/pt/util/PasswordHash.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/util/RandomUtil.class b/target/classes/com/github/example/pt/util/RandomUtil.class
index b6ac3fe..969ad27 100644
--- a/target/classes/com/github/example/pt/util/RandomUtil.class
+++ b/target/classes/com/github/example/pt/util/RandomUtil.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/util/SafeUUID.class b/target/classes/com/github/example/pt/util/SafeUUID.class
index a20c7c6..a070c31 100644
--- a/target/classes/com/github/example/pt/util/SafeUUID.class
+++ b/target/classes/com/github/example/pt/util/SafeUUID.class
Binary files differ
diff --git a/target/classes/com/github/example/pt/util/TorrentParser.class b/target/classes/com/github/example/pt/util/TorrentParser.class
index 33dfca4..4cb7ca9 100644
--- a/target/classes/com/github/example/pt/util/TorrentParser.class
+++ b/target/classes/com/github/example/pt/util/TorrentParser.class
Binary files differ
diff --git a/target/classes/ppt.sql b/target/classes/ppt.sql
index ad94e82..28ab119 100644
--- a/target/classes/ppt.sql
+++ b/target/classes/ppt.sql
@@ -724,7 +724,7 @@
 -- ----------------------------
 -- Records of users
 -- ----------------------------
-INSERT INTO `users` VALUES (1, 'testuser@example.com', '$2a$06$JqvHpC94mnN23uwmZX0XHeuyFj3M22Ikw8VBZRopfrlWbPfA4KREu', 'testuser', 1, '47050e8f-f3fd-4a9c-a828-0e0de456691f', '2025-06-03 11:34:08', 'https://www.baidu.com/facivon.ico', '测试用户', '这个用户很懒,还没有个性签名', 'zh-CN', '100mbps', '100mbps', 0, 27723388, 27723388, 0, '未知', 0.00, 0, 30790068, '948c9146-ff5f-4ad6-8ba5-d32e1209cafd', '0');
+INSERT INTO `users` VALUES (1, 'testuser@example.com', '$2a$06$JqvHpC94mnN23uwmZX0XHeuyFj3M22Ikw8VBZRopfrlWbPfA4KREu', 'testuser', 1, '47050e8f-f3fd-4a9c-a828-0e0de456691f', '2025-06-03 11:34:08', '/default-avatar.png', '测试用户', '这个用户很懒,还没有个性签名', 'zh-CN', '100mbps', '100mbps', 0, 27723388, 27723388, 0, '未知', 0.00, 0, 30790068, '948c9146-ff5f-4ad6-8ba5-d32e1209cafd', '0');
 
 SET FOREIGN_KEY_CHECKS = 1;
 
diff --git a/target/classes/test_basic_data.sql b/target/classes/test_basic_data.sql
new file mode 100644
index 0000000..cb3c279
--- /dev/null
+++ b/target/classes/test_basic_data.sql
@@ -0,0 +1,17 @@
+-- 插入测试用户(如果users表为空的话)
+INSERT IGNORE INTO users (id, username, email, password, created_at, updated_at) VALUES
+(1, 'testuser1', 'test1@example.com', '$2a$10$test.hash.password1', NOW(), NOW()),
+(2, 'testuser2', 'test2@example.com', '$2a$10$test.hash.password2', NOW(), NOW()),
+(3, 'testuser3', 'test3@example.com', '$2a$10$test.hash.password3', NOW(), NOW());
+
+-- 插入测试论坛版块(如果forums表为空的话)
+INSERT IGNORE INTO forums (id, slug, name, description, sort_order, is_locked) VALUES
+(1, 'general', '综合讨论区', '这里是综合讨论的地方,大家可以畅所欲言', 1, FALSE),
+(2, 'technical', '技术交流', '技术相关的讨论和分享', 2, FALSE),
+(3, 'announcements', '公告区', '站点公告和重要通知', 0, FALSE);
+
+-- 插入测试话题(如果topics表为空的话)
+INSERT IGNORE INTO topics (id, forum_id, user_id, title, is_pinned, is_locked, created_at, updated_at) VALUES
+(1, 1, 1, '欢迎来到综合讨论区', FALSE, FALSE, NOW(), NOW()),
+(2, 1, 2, '大家都在做什么项目?', FALSE, FALSE, NOW(), NOW()),
+(3, 2, 3, 'Spring Boot最佳实践分享', FALSE, FALSE, NOW(), NOW()); 
\ No newline at end of file
diff --git a/target/classes/test_posts_data.sql b/target/classes/test_posts_data.sql
new file mode 100644
index 0000000..4d331f1
--- /dev/null
+++ b/target/classes/test_posts_data.sql
@@ -0,0 +1,28 @@
+-- 测试数据:帖子和回复
+-- 假设已有用户ID 1, 2, 3 和话题ID 1
+
+-- 插入主帖(parent_id为NULL)
+INSERT INTO posts (topic_id, user_id, content, created_at, updated_at, is_deleted, parent_id) VALUES
+(1, 1, '这是话题1的第一个回复内容。大家觉得这个话题怎么样?', NOW(), NOW(), FALSE, NULL),
+(1, 2, '我觉得这个话题很有意思,值得深入讨论!', NOW(), NOW(), FALSE, NULL);
+
+-- 插入二级回复(回复第一个帖子,post_id=1)
+INSERT INTO posts (topic_id, user_id, content, created_at, updated_at, is_deleted, parent_id) VALUES
+(1, 3, '同意楼上的观点,这确实是个值得讨论的话题。', NOW(), NOW(), FALSE, 1),
+(1, 1, '谢谢大家的支持!我们继续深入讨论吧。', NOW(), NOW(), FALSE, 1);
+
+-- 插入三级回复(回复第一个二级回复,post_id=3)
+INSERT INTO posts (topic_id, user_id, content, created_at, updated_at, is_deleted, parent_id) VALUES
+(1, 2, '我有一些不同的看法,让我来分享一下...', NOW(), NOW(), FALSE, 3);
+
+-- 插入更多回复到第二个主帖(post_id=2)
+INSERT INTO posts (topic_id, user_id, content, created_at, updated_at, is_deleted, parent_id) VALUES
+(1, 3, '我也同意这个观点,补充一点...', NOW(), NOW(), FALSE, 2),
+(1, 1, '大家都说得很有道理!', NOW(), NOW(), FALSE, 2);
+
+-- 如果需要为其他话题添加数据,可以修改topic_id
+-- 为话题2添加一些测试数据
+INSERT INTO posts (topic_id, user_id, content, created_at, updated_at, is_deleted, parent_id) VALUES
+(2, 1, '这是话题2的第一个回复。', NOW(), NOW(), FALSE, NULL),
+(2, 2, '话题2看起来也很有趣!', NOW(), NOW(), FALSE, NULL),
+(2, 3, '我对话题2有些疑问...', NOW(), NOW(), FALSE, 1); -- 回复话题2的第一个帖子 
\ No newline at end of file
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
index 7af9fb2..1ca63d6 100644
--- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -1,121 +1,55 @@
 com\github\example\pt\service\BlacklistClientService.class
 com\github\example\pt\repository\PromotionPolicyRepository.class
 com\github\example\pt\service\AnnouncePerformanceMonitorService.class
-com\github\example\pt\repository\TorrentRepository.class
 com\github\example\pt\service\SettingService.class
-com\github\example\pt\util\edazdarevic\commons\net\CIDRUtil.class
 com\github\example\pt\entity\TransferHistory.class
 com\github\example\pt\exception\BrowserReadableAnnounceException.class
 com\github\example\pt\entity\UserGroup.class
-com\github\example\pt\controller\dto\response\PromotionResponseDTO.class
 com\github\example\pt\repository\TransferHistoryRepository.class
 com\github\example\pt\controller\DebugController$DebugTorrent.class
-com\github\example\pt\util\ClassUtil.class
 com\github\example\pt\util\TorrentParser.class
-com\github\example\pt\repository\ChatMessageRepository.class
 com\github\example\pt\controller\announce\AnnounceController.class
 com\github\example\pt\controller\torrent\dto\request\TorrentScrapeRequestDTO.class
 com\github\example\pt\entity\Peer.class
-com\github\example\pt\controller\dto\response\UserGroupResponseDTO.class
-com\github\example\pt\service\ExamService.class
-com\github\example\pt\exception\RESTException.class
-com\github\example\pt\exception\InvalidAnnounceException.class
-com\github\example\pt\redisrepository\RedisLoginAttemptRepository.class
 com\github\example\pt\controller\torrent\TorrentController.class
 com\github\example\pt\controller\chat\ChatHistoryController.class
 com\github\example\pt\entity\SettingEntity.class
-com\github\example\pt\exception\APIErrorCode.class
 com\github\example\pt\repository\TagRepository.class
-com\github\example\pt\controller\dto\response\UserBasicResponseDTO.class
 com\github\example\pt\type\PrivacyLevel.class
-com\github\example\pt\repository\SettingRepository.class
 com\github\example\pt\listener\SaTokenEventListener.class
 com\github\example\pt\util\URLEncodeUtil.class
-com\github\example\pt\entity\Exam.class
 com\github\example\pt\controller\auth\dto\request\LoginRequestDTO.class
-com\github\example\pt\type\GuestAccessBlocker.class
-com\github\example\pt\exception\RetryableAnnounceException.class
 com\github\example\pt\config\WebSocketConfig.class
-com\github\example\pt\repository\ExamPlanRepository.class
-com\github\example\pt\config\ApiPrinter.class
-com\github\example\pt\entity\ExamPlan.class
 com\github\example\pt\service\AuthenticationService.class
-com\github\example\pt\controller\dto\response\ScrapeContainerDTO.class
-com\github\example\pt\service\PromotionService.class
 com\github\example\pt\config\SecurityConfig.class
 com\github\example\pt\type\LoginType.class
 com\github\example\pt\service\TagService.class
-com\github\example\pt\ptApplication.class
 com\github\example\pt\controller\dto\response\UserTinyResponseDTO.class
-com\github\example\pt\util\BencodeUtil.class
 com\github\example\pt\autoconfig\SafeHTMLConfig.class
-com\github\example\pt\repository\LoginHistoryRepository.class
-com\github\example\pt\util\IPUtil.class
-com\github\example\pt\controller\category\CategoryController.class
-com\github\example\pt\exception\FixedAnnounceException.class
-com\github\example\pt\util\SafeUUID.class
 com\github\example\pt\service\CategoryService.class
-com\github\example\pt\util\PackUtil.class
-com\github\example\pt\controller\chat\dto\ChatMessageDTO.class
-com\github\example\pt\config\SaTokenHandshakeInterceptor.class
-com\github\example\pt\repository\UserRepository.class
 com\github\example\pt\service\PermissionService.class
 com\github\example\pt\type\AnnounceEventTypeConverter.class
-com\github\example\pt\util\InfoHashUtil.class
-com\github\example\pt\controller\dto\response\LoginStatusResponseDTO.class
-com\github\example\pt\exception\TorrentException.class
 com\github\example\pt\repository\CategoryRepository.class
 com\github\example\pt\exception\InvalidTorrentVersionException.class
-com\github\example\pt\repository\UserGroupRepository.class
 com\github\example\pt\controller\promotion\PromotionController.class
 com\github\example\pt\service\ExamPlanService.class
 com\github\example\pt\controller\DebugController.class
-com\github\example\pt\type\IPFormatRequirement.class
 com\github\example\pt\controller\auth\AuthController.class
-com\github\example\pt\autoconfig\QuartzConfig$AutowiringSpringBeanJobFactory.class
 com\github\example\pt\controller\dto\response\UserSessionResponseDTO.class
 com\github\example\pt\entity\ChatMessage.class
-com\github\example\pt\service\LoginHistoryService.class
-com\github\example\pt\util\ExecutorUtil.class
 com\github\example\pt\service\AnnounceService.class
 com\github\example\pt\controller\torrent\dto\response\TorrentScrapeResponseDTO.class
-com\github\example\pt\exception\InvalidTorrentPiecesException.class
-com\github\example\pt\service\UserGroupService.class
 com\github\example\pt\util\PasswordHash.class
 com\github\example\pt\service\ThanksService.class
-com\github\example\pt\controller\feed\FeedController.class
-com\github\example\pt\util\MiscUtil.class
-com\github\example\pt\exception\InvalidTorrentVerifyException.class
 com\github\example\pt\service\TransferHistoryService$PeerStatus.class
-com\github\example\pt\controller\torrent\dto\request\ThanksResponseDTO.class
-com\github\example\pt\exception\InvalidTorrentFileException.class
 com\github\example\pt\repository\PermissionRepository.class
-com\github\example\pt\controller\advice\GlobalControllerAdvice.class
 com\github\example\pt\entity\Category.class
-com\github\example\pt\repository\ExamRepository.class
-com\github\example\pt\controller\torrent\form\TorrentUploadForm.class
-com\github\example\pt\exception\EmptyTorrentFileException.class
-com\github\example\pt\service\PeerService.class
-com\github\example\pt\util\ByteUtil.class
-com\github\example\pt\entity\User.class
-com\github\example\pt\exception\AnnounceException.class
-com\github\example\pt\repository\PeersRepository.class
 com\github\example\pt\autoconfig\JetcacheConfig.class
-com\github\example\pt\controller\auth\dto\request\RegisterRequestDTO.class
-com\github\example\pt\util\RandomUtil.class
 com\github\example\pt\type\AnnounceEventType.class
 com\github\example\pt\service\UserService.class
-com\github\example\pt\objects\ResponsePojo.class
-com\github\example\pt\autoconfig\JacksonConfig.class
-com\github\example\pt\exception\TrackerException.class
 com\github\example\pt\util\IpValidator.class
 com\github\example\pt\entity\Permission.class
 com\github\example\pt\controller\torrent\dto\response\TorrentUploadSuccessResponseDTO.class
-com\github\example\pt\entity\LoginHistory.class
-com\github\example\pt\service\AnnounceService$AnnounceTask.class
-com\github\example\pt\service\TorrentService.class
-com\github\example\pt\entity\Thanks.class
-com\github\example\pt\config\MailConfig.class
 com\github\example\pt\autoconfig\WorkDirectoryConfig.class
 com\github\example\pt\controller\dto\response\TorrentBasicResponseDTO.class
 com\github\example\pt\autoconfig\RedisConfig.class
@@ -124,27 +58,93 @@
 com\github\example\pt\exception\APIGenericException.class
 com\github\example\pt\exception\BadConfigException.class
 com\github\example\pt\type\GuestAccessRequirement.class
-com\github\example\pt\config\TrackerConfig.class
-com\github\example\pt\controller\announce\AnnounceController$PeerResult.class
 com\github\example\pt\entity\SeedBox.class
 com\github\example\pt\controller\torrent\dto\request\SearchTorrentRequestDTO.class
-com\github\example\pt\service\TransferHistoryService.class
 com\github\example\pt\exception\AnnounceBusyException.class
-com\github\example\pt\crontask\PeersCleanup.class
-com\github\example\pt\websocket\ChatRawWebSocketHandler.class
-com\github\example\pt\controller\dto\response\CategoryResponseDTO.class
-com\github\example\pt\entity\Tag.class
-com\github\example\pt\repository\ThanksRepository.class
-com\github\example\pt\controller\dto\response\TransferHistoryDTO.class
 com\github\example\pt\util\HibernateSessionUtil.class
 com\github\example\pt\controller\dto\response\PeerInfoResponseDTO.class
 com\github\example\pt\controller\dto\response\TorrentInfoResponseDTO.class
-com\github\example\pt\entity\PromotionPolicy.class
-com\github\example\pt\redisentity\RedisLoginAttempt.class
-com\github\example\pt\autoconfig\QuartzConfig.class
 com\github\example\pt\entity\Torrent.class
 com\github\example\pt\controller\dto\response\UserResponseDTO.class
 com\github\example\pt\controller\torrent\dto\response\TorrentSearchResultResponseDTO.class
 com\github\example\pt\config\SiteBasicConfig.class
 com\github\example\pt\service\SaTokenPermImpl.class
 com\github\example\pt\util\GsonUtil.class
+com\github\example\pt\repository\TorrentRepository.class
+com\github\example\pt\util\edazdarevic\commons\net\CIDRUtil.class
+com\github\example\pt\controller\dto\response\PromotionResponseDTO.class
+com\github\example\pt\util\ClassUtil.class
+com\github\example\pt\repository\ChatMessageRepository.class
+com\github\example\pt\controller\dto\response\UserGroupResponseDTO.class
+com\github\example\pt\service\ExamService.class
+com\github\example\pt\exception\RESTException.class
+com\github\example\pt\exception\InvalidAnnounceException.class
+com\github\example\pt\redisrepository\RedisLoginAttemptRepository.class
+com\github\example\pt\exception\APIErrorCode.class
+com\github\example\pt\controller\dto\response\UserBasicResponseDTO.class
+com\github\example\pt\repository\SettingRepository.class
+com\github\example\pt\entity\Exam.class
+com\github\example\pt\type\GuestAccessBlocker.class
+com\github\example\pt\exception\RetryableAnnounceException.class
+com\github\example\pt\repository\ExamPlanRepository.class
+com\github\example\pt\config\ApiPrinter.class
+com\github\example\pt\entity\ExamPlan.class
+com\github\example\pt\controller\dto\response\ScrapeContainerDTO.class
+com\github\example\pt\service\PromotionService.class
+com\github\example\pt\ptApplication.class
+com\github\example\pt\util\BencodeUtil.class
+com\github\example\pt\repository\LoginHistoryRepository.class
+com\github\example\pt\util\IPUtil.class
+com\github\example\pt\controller\category\CategoryController.class
+com\github\example\pt\exception\FixedAnnounceException.class
+com\github\example\pt\util\SafeUUID.class
+com\github\example\pt\util\PackUtil.class
+com\github\example\pt\controller\chat\dto\ChatMessageDTO.class
+com\github\example\pt\config\SaTokenHandshakeInterceptor.class
+com\github\example\pt\repository\UserRepository.class
+com\github\example\pt\util\InfoHashUtil.class
+com\github\example\pt\controller\dto\response\LoginStatusResponseDTO.class
+com\github\example\pt\exception\TorrentException.class
+com\github\example\pt\repository\UserGroupRepository.class
+com\github\example\pt\type\IPFormatRequirement.class
+com\github\example\pt\autoconfig\QuartzConfig$AutowiringSpringBeanJobFactory.class
+com\github\example\pt\service\LoginHistoryService.class
+com\github\example\pt\util\ExecutorUtil.class
+com\github\example\pt\exception\InvalidTorrentPiecesException.class
+com\github\example\pt\service\UserGroupService.class
+com\github\example\pt\controller\feed\FeedController.class
+com\github\example\pt\util\MiscUtil.class
+com\github\example\pt\exception\InvalidTorrentVerifyException.class
+com\github\example\pt\controller\torrent\dto\request\ThanksResponseDTO.class
+com\github\example\pt\exception\InvalidTorrentFileException.class
+com\github\example\pt\controller\advice\GlobalControllerAdvice.class
+com\github\example\pt\repository\ExamRepository.class
+com\github\example\pt\controller\torrent\form\TorrentUploadForm.class
+com\github\example\pt\exception\EmptyTorrentFileException.class
+com\github\example\pt\service\PeerService.class
+com\github\example\pt\util\ByteUtil.class
+com\github\example\pt\entity\User.class
+com\github\example\pt\exception\AnnounceException.class
+com\github\example\pt\repository\PeersRepository.class
+com\github\example\pt\controller\auth\dto\request\RegisterRequestDTO.class
+com\github\example\pt\util\RandomUtil.class
+com\github\example\pt\objects\ResponsePojo.class
+com\github\example\pt\autoconfig\JacksonConfig.class
+com\github\example\pt\exception\TrackerException.class
+com\github\example\pt\entity\LoginHistory.class
+com\github\example\pt\service\AnnounceService$AnnounceTask.class
+com\github\example\pt\service\TorrentService.class
+com\github\example\pt\entity\Thanks.class
+com\github\example\pt\config\MailConfig.class
+com\github\example\pt\config\TrackerConfig.class
+com\github\example\pt\controller\announce\AnnounceController$PeerResult.class
+com\github\example\pt\service\TransferHistoryService.class
+com\github\example\pt\crontask\PeersCleanup.class
+com\github\example\pt\websocket\ChatRawWebSocketHandler.class
+com\github\example\pt\controller\dto\response\CategoryResponseDTO.class
+com\github\example\pt\entity\Tag.class
+com\github\example\pt\repository\ThanksRepository.class
+com\github\example\pt\controller\dto\response\TransferHistoryDTO.class
+com\github\example\pt\entity\PromotionPolicy.class
+com\github\example\pt\redisentity\RedisLoginAttempt.class
+com\github\example\pt\autoconfig\QuartzConfig.class
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
index d000526..560ecf2 100644
--- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -1,144 +1,186 @@
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\LoginHistoryService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\UserService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Torrent.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\ChatMessage.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\ClassUtil.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Thanks.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\ExecutorUtil.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\config\WebSocketConfig.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\chat\dto\ChatMessageDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\MiscUtil.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\SettingService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\UserSessionResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\BadConfigException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\autoconfig\QuartzConfig.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\SaTokenPermImpl.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\TransferHistoryService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\InvalidTorrentPiecesException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\ChatMessageRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\InvalidTorrentFileException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\AnnounceBusyException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\EmptyTorrentFileException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\IPUtil.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\redisentity\RedisLoginAttempt.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Category.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Peer.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\config\ApiPrinter.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\type\PrivacyLevel.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\TorrentException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\config\SaTokenHandshakeInterceptor.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\UserBasicResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\feed\FeedController.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\ExamService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\PromotionService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\config\MailConfig.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\LoginHistory.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\BrowserReadableAnnounceException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\InvalidTorrentVersionException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\PermissionService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\InvalidTorrentVerifyException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\type\GuestAccessBlocker.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\dto\response\TorrentSearchResultResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\IpValidator.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\PromotionPolicy.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\SafeUUID.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\form\TorrentUploadForm.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\APIErrorCode.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\type\AnnounceEventType.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\PermissionRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\chat\ChatHistoryController.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\type\LoginType.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\ExamPlanService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Permission.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\TrackerException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\TransferHistoryRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\UserGroup.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\redisrepository\RedisLoginAttemptRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\CategoryService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\InfoHashUtil.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\URLEncodeUtil.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\objects\ResponsePojo.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\crontask\PeersCleanup.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\announce\AnnounceController.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\TransferHistoryDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\websocket\ChatRawWebSocketHandler.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\TorrentBasicResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\AnnounceException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\auth\dto\request\LoginRequestDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\ThanksService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\auth\AuthController.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\UserGroupService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\BlacklistClientService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\PackUtil.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\ExamPlanRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\ByteUtil.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\autoconfig\WorkDirectoryConfig.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\AuthenticationService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\TorrentController.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\dto\request\SearchTorrentRequestDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\LoginStatusResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\User.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\RetryableAnnounceException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\PasswordHash.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\UserResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\PeerInfoResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\config\TrackerConfig.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\SeedBox.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\CategoryResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\type\AnnounceEventTypeConverter.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\TorrentParser.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\HibernateSessionUtil.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\config\SiteBasicConfig.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Exam.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\TransferHistory.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\CategoryRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\TorrentRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\auth\dto\request\RegisterRequestDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\category\CategoryController.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\SettingEntity.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\dto\request\TorrentScrapeRequestDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\type\GuestAccessRequirement.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\edazdarevic\commons\net\CIDRUtil.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\GsonUtil.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\TagRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\dto\response\TorrentScrapeResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\FixedAnnounceException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\TorrentService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\APIGenericException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\ExamPlan.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\ptApplication.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\ThanksRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\TorrentInfoResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\listener\SaTokenEventListener.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\InvalidAnnounceException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\type\IPFormatRequirement.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\UserTinyResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\DebugController.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\PromotionResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\autoconfig\JacksonConfig.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\ExamRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\BooleanUtil.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\AnnouncePerformanceMonitorService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\RESTException.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\advice\GlobalControllerAdvice.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\autoconfig\JetcacheConfig.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\promotion\PromotionController.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\RandomUtil.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\config\SecurityConfig.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\ScrapeContainerDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\dto\response\TorrentUploadSuccessResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\autoconfig\RedisConfig.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\BencodeUtil.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\PeersRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Tag.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\UserGroupResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\PeerService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\UserRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\UserGroupRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\LoginHistoryRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\dto\request\ThanksResponseDTO.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\SettingRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\AnnounceService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\TagService.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\PromotionPolicyRepository.java
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\main\java\com\github\example\pt\autoconfig\SafeHTMLConfig.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\TopicViewId.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\TrackerException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\chat\dto\ChatMessageDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\PeerInfoResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\TopicService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\TopicTag.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\objects\ResponsePojo.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\UserBasicResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\ForumService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Peer.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\TorrentException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\AnnouncePerformanceMonitorService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\PostService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\autoconfig\SafeHTMLConfig.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\ExamPlanService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\config\MailConfig.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\InvalidTorrentFileException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\PostRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\ForumRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\InfoHashUtil.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\SafeUUID.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\LoginHistoryRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\ChatMessage.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\websocket\ChatRawWebSocketHandler.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\PostController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\auth\AuthController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\TagRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\SettingService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\TorrentInfoResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\CategoryResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\CategoryRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\IPUtil.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\autoconfig\JetcacheConfig.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\APIErrorCode.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\dto\response\TorrentUploadSuccessResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\dto\response\TorrentSearchResultResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\AnnounceException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\BrowserReadableAnnounceException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\FixedAnnounceException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\category\CategoryController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\UserGroupResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\GsonUtil.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\UserForumHistoryRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\PostLike.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\autoconfig\SaTokenConfig.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Post.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\UserGroupService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\crontask\PeersCleanup.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\MiscUtil.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\auth\dto\request\RegisterRequestDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\UserGroupRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\advice\GlobalControllerAdvice.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\RandomUtil.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\promotion\PromotionController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\ShareRatioService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\ClassUtil.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Forum.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Torrent.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\BencodeUtil.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\auth\dto\request\LoginRequestDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\type\PrivacyLevel.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\TopicController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\ByteUtil.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\ForumTagController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\TopicSubscription.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\form\TorrentUploadForm.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\RetryableAnnounceException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\ForumTagRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\ExamRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\PeersRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\BlacklistClientService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\TopicViewService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\redisrepository\RedisLoginAttemptRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Exam.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\chat\ChatHistoryController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\TagService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\UserSessionResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\UserForumHistoryController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\autoconfig\QuartzConfig.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\InvalidTorrentVersionException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\PromotionPolicyRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\TopicSubscriptionService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Topic.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\ForumActionType.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\autoconfig\WorkDirectoryConfig.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\config\WebSocketConfig.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\TopicTagRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\AnnounceService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\edazdarevic\commons\net\CIDRUtil.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\ExamPlan.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\ExecutorUtil.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\UserResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\ChatMessageRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\TransferHistoryService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\config\SaTokenHandshakeInterceptor.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\ThanksRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\SaTokenPermImpl.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\UserService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\TopicViewRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\LoginHistoryService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\PasswordHash.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\TransferHistoryDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\UserForumHistory.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\HibernateSessionUtil.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\InvalidAnnounceException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\ExamPlanRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\LoginStatusResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\InvalidTorrentPiecesException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\autoconfig\RedisConfig.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\PeerService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\UserGroup.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\dto\request\TorrentScrapeRequestDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\type\LoginType.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\PromotionService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\ThanksService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\type\GuestAccessRequirement.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\AnnounceBusyException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\TorrentService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\autoconfig\JacksonConfig.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\TopicSubscriptionController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\ScrapeContainerDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\UserForumHistoryService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\TopicTagService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\RESTException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\PermissionService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\APIGenericException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\ptApplication.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\SettingEntity.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\TopicSubscriptionId.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\type\GuestAccessBlocker.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\IpValidator.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\User.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\type\AnnounceEventType.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\EmptyTorrentFileException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\type\IPFormatRequirement.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\TorrentRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\dto\response\TorrentScrapeResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\PackUtil.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\TorrentParser.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\URLEncodeUtil.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\feed\FeedController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Tag.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\util\BooleanUtil.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Permission.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\config\ApiPrinter.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\TopicRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\AuthenticationService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\ExamService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\redisentity\RedisLoginAttempt.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\config\SiteBasicConfig.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\listener\SaTokenEventListener.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\PostLikeController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\UserRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Category.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\PostLikeRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\TransferHistory.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\TorrentBasicResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\ForumTagService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\TorrentController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\DebugController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\PostLikeService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\dto\request\SearchTorrentRequestDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\config\TrackerConfig.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\SeedBox.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\TopicSubscriptionRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\Thanks.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\TorrentDownloadController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\TopicView.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\TransferHistoryRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\type\AnnounceEventTypeConverter.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\BadConfigException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\config\SecurityConfig.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\announce\AnnounceController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\ForumController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\service\CategoryService.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\PromotionPolicy.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\LoginHistory.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\TopicViewController.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\PromotionResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\SettingRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\dto\response\UserTinyResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\repository\PermissionRepository.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\TopicTagId.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\exception\InvalidTorrentVerifyException.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\controller\torrent\dto\request\ThanksResponseDTO.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\main\java\com\github\example\pt\entity\ForumTag.java
diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
index e72d29d..c88594e 100644
--- a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
+++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
@@ -1 +1 @@
-C:\Users\75001\Desktop\Sapling-main\PT_Sixth_Backend\src\test\java\com\github\example\pt\ptApplicationTests.java
+C:\Users\20815\PT_Sixth\PT_Sixth_Backend\src\test\java\com\github\example\pt\ptApplicationTests.java
diff --git a/target/surefire-reports/2025-06-06T13-53-41_147-jvmRun1.dump b/target/surefire-reports/2025-06-06T13-53-41_147-jvmRun1.dump
deleted file mode 100644
index 4636bb9..0000000
--- a/target/surefire-reports/2025-06-06T13-53-41_147-jvmRun1.dump
+++ /dev/null
@@ -1,14 +0,0 @@
-# Created at 2025-06-06T13:53:42.822

-System.exit() or native command error interrupted process checker.

-java.lang.IllegalStateException: Cannot use PPID 5704 process information. Going to use NOOP events.

-	at org.apache.maven.surefire.booter.PpidChecker.checkProcessInfo(PpidChecker.java:155)

-	at org.apache.maven.surefire.booter.PpidChecker.isProcessAlive(PpidChecker.java:116)

-	at org.apache.maven.surefire.booter.ForkedBooter$2.run(ForkedBooter.java:214)

-	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)

-	at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)

-	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)

-	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)

-	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)

-	at java.base/java.lang.Thread.run(Thread.java:840)

-

-

diff --git a/target/test-classes/com/github/example/pt/ptApplicationTests.class b/target/test-classes/com/github/example/pt/ptApplicationTests.class
index 6aad098..f4948e0 100644
--- a/target/test-classes/com/github/example/pt/ptApplicationTests.class
+++ b/target/test-classes/com/github/example/pt/ptApplicationTests.class
Binary files differ