完整后端
Change-Id: I205774adfc89e605b9be69d80d9b302337988e6b
diff --git a/pom.xml b/pom.xml
index 726ba8b..6bf3e4a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,209 +1,209 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>3.0.2</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <groupId>com.github.bitsapling</groupId>
- <artifactId>Sapling</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>Sapling</name>
- <description>Sapling project</description>
-
- <properties>
- <java.version>17</java.version>
- <maven.compiler.source>17</maven.compiler.source>
- <maven.compiler.target>17</maven.compiler.target>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-cache</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-jpa</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-mail</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-quartz</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-validation</artifactId>
- </dependency>
- <dependency>
- <groupId>cn.dev33</groupId>
- <artifactId>sa-token-spring-boot3-starter</artifactId>
- <version>1.34.0</version>
- </dependency>
- <dependency>
- <groupId>cn.dev33</groupId>
- <artifactId>sa-token-dao-redis-jackson</artifactId>
- <version>1.34.0</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-json</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-tomcat</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>2.11.0</version>
- </dependency>
- <dependency>
- <groupId>commons-codec</groupId>
- <artifactId>commons-codec</artifactId>
- <version>1.15</version>
- </dependency>
- <dependency>
- <groupId>commons-validator</groupId>
- <artifactId>commons-validator</artifactId>
- <version>1.7</version>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- <version>3.12.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-text</artifactId>
- <version>1.10.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-compress</artifactId>
- <version>1.22</version>
- </dependency>
- <dependency>
- <groupId>org.jetbrains</groupId>
- <artifactId>annotations</artifactId>
- <version>23.1.0</version>
- </dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- <version>31.1-jre</version>
- </dependency>
- <dependency>
- <groupId>at.favre.lib</groupId>
- <artifactId>bcrypt</artifactId>
- <version>0.9.0</version>
- </dependency>
- <dependency>
- <groupId>com.konghq</groupId>
- <artifactId>unirest-java</artifactId>
- <version>3.14.1</version>
- </dependency>
- <dependency>
- <groupId>me.tongfei</groupId>
- <artifactId>progressbar</artifactId>
- <version>0.9.5</version>
- </dependency>
- <dependency>
- <groupId>com.dampcake</groupId>
- <artifactId>bencode</artifactId>
- <version>1.4</version>
- </dependency>
- <dependency>
- <groupId>com.mysql</groupId>
- <artifactId>mysql-connector-j</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>com.h2database</groupId>
- <artifactId>h2</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-devtools</artifactId>
- <scope>development</scope>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.datatype</groupId>
- <artifactId>jackson-datatype-jsr310</artifactId>
- <version>2.14.1</version>
- </dependency>
- <dependency>
- <groupId>org.redisson</groupId>
- <artifactId>redisson-hibernate-6</artifactId>
- <version>3.19.3</version>
- </dependency>
- <dependency>
- <groupId>com.googlecode.owasp-java-html-sanitizer</groupId>
- <artifactId>owasp-java-html-sanitizer</artifactId>
- <version>20220608.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-pool2</artifactId>
- </dependency>
- <dependency>
- <groupId>com.rometools</groupId>
- <artifactId>rome</artifactId>
- <version>1.18.0</version>
- </dependency>
- <dependency>
- <groupId>com.alicp.jetcache</groupId>
- <artifactId>jetcache-starter-redis</artifactId>
- <version>2.7.3</version>
- </dependency>
- <dependency>
- <groupId>org.greenrobot</groupId>
- <artifactId>eventbus-java</artifactId>
- <version>3.3.1</version>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <configuration>
- <excludes>
- <exclude>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- </exclude>
- </excludes>
- </configuration>
- </plugin>
- </plugins>
- </build>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-parent</artifactId>
+ <version>3.0.2</version>
+ <relativePath/> <!-- lookup parent from repository -->
+ </parent>
+ <groupId>com.github.bitsapling</groupId>
+ <artifactId>Sapling</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <name>Sapling</name>
+ <description>Sapling project</description>
+
+ <properties>
+ <java.version>17</java.version>
+ <maven.compiler.source>17</maven.compiler.source>
+ <maven.compiler.target>17</maven.compiler.target>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-cache</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-redis</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-jpa</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-mail</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-quartz</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-validation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>cn.dev33</groupId>
+ <artifactId>sa-token-spring-boot3-starter</artifactId>
+ <version>1.34.0</version>
+ </dependency>
+ <dependency>
+ <groupId>cn.dev33</groupId>
+ <artifactId>sa-token-dao-redis-jackson</artifactId>
+ <version>1.34.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-json</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-tomcat</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.11.0</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.15</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-validator</groupId>
+ <artifactId>commons-validator</artifactId>
+ <version>1.7</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>3.12.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-text</artifactId>
+ <version>1.10.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-compress</artifactId>
+ <version>1.22</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains</groupId>
+ <artifactId>annotations</artifactId>
+ <version>23.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>31.1-jre</version>
+ </dependency>
+ <dependency>
+ <groupId>at.favre.lib</groupId>
+ <artifactId>bcrypt</artifactId>
+ <version>0.9.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.konghq</groupId>
+ <artifactId>unirest-java</artifactId>
+ <version>3.14.1</version>
+ </dependency>
+ <dependency>
+ <groupId>me.tongfei</groupId>
+ <artifactId>progressbar</artifactId>
+ <version>0.9.5</version>
+ </dependency>
+ <dependency>
+ <groupId>com.dampcake</groupId>
+ <artifactId>bencode</artifactId>
+ <version>1.4</version>
+ </dependency>
+ <dependency>
+ <groupId>com.mysql</groupId>
+ <artifactId>mysql-connector-j</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-devtools</artifactId>
+ <scope>development</scope>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.datatype</groupId>
+ <artifactId>jackson-datatype-jsr310</artifactId>
+ <version>2.14.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.redisson</groupId>
+ <artifactId>redisson-hibernate-6</artifactId>
+ <version>3.19.3</version>
+ </dependency>
+ <dependency>
+ <groupId>com.googlecode.owasp-java-html-sanitizer</groupId>
+ <artifactId>owasp-java-html-sanitizer</artifactId>
+ <version>20220608.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-pool2</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.rometools</groupId>
+ <artifactId>rome</artifactId>
+ <version>1.18.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.alicp.jetcache</groupId>
+ <artifactId>jetcache-starter-redis</artifactId>
+ <version>2.7.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.greenrobot</groupId>
+ <artifactId>eventbus-java</artifactId>
+ <version>3.3.1</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-maven-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ </exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
</project>
\ No newline at end of file
diff --git a/src/main/java/com/github/example/pt/config/ApiPrinter.java b/src/main/java/com/github/example/pt/config/ApiPrinter.java
index 6019575..c5dce23 100644
--- a/src/main/java/com/github/example/pt/config/ApiPrinter.java
+++ b/src/main/java/com/github/example/pt/config/ApiPrinter.java
@@ -1,24 +1,24 @@
-package com.github.example.pt.config;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.context.event.ApplicationReadyEvent;
-import org.springframework.context.ApplicationListener;
-import org.springframework.stereotype.Component;
-import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
-
-@Component
-public class ApiPrinter implements ApplicationListener<ApplicationReadyEvent> {
-
- @Autowired
- private RequestMappingHandlerMapping handlerMapping;
-
- @Override
- public void onApplicationEvent(ApplicationReadyEvent event) {
- System.out.println("=== 项目启动,已注册的 API 接口如下: ===");
- handlerMapping.getHandlerMethods().forEach((mapping, method) -> {
- System.out.println("接口路径: " + mapping + " -> 方法: " + method.getMethod().getDeclaringClass().getSimpleName()
- + "." + method.getMethod().getName());
- });
- System.out.println("========================================");
- }
+package com.github.example.pt.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
+
+@Component
+public class ApiPrinter implements ApplicationListener<ApplicationReadyEvent> {
+
+ @Autowired
+ private RequestMappingHandlerMapping handlerMapping;
+
+ @Override
+ public void onApplicationEvent(ApplicationReadyEvent event) {
+ System.out.println("=== 项目启动,已注册的 API 接口如下: ===");
+ handlerMapping.getHandlerMethods().forEach((mapping, method) -> {
+ System.out.println("接口路径: " + mapping + " -> 方法: " + method.getMethod().getDeclaringClass().getSimpleName()
+ + "." + method.getMethod().getName());
+ });
+ System.out.println("========================================");
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/github/example/pt/type/AnnounceEventTypeConverter.java b/src/main/java/com/github/example/pt/type/AnnounceEventTypeConverter.java
index f2b00e1..1f69369 100644
--- a/src/main/java/com/github/example/pt/type/AnnounceEventTypeConverter.java
+++ b/src/main/java/com/github/example/pt/type/AnnounceEventTypeConverter.java
@@ -1,21 +1,21 @@
-package com.github.example.pt.type;
-
-import jakarta.persistence.AttributeConverter;
-import jakarta.persistence.Converter;
-
-@Converter(autoApply = false)
-public class AnnounceEventTypeConverter implements AttributeConverter<AnnounceEventType, String> {
- @Override
- public String convertToDatabaseColumn(AnnounceEventType attribute) {
- if (attribute == null) {
- return null;
- }
- return attribute.getKey(); // 比如 "completed"
- }
-
- @Override
- public AnnounceEventType convertToEntityAttribute(String dbData) {
- return AnnounceEventType.fromName(dbData);
- }
-}
-
+package com.github.example.pt.type;
+
+import jakarta.persistence.AttributeConverter;
+import jakarta.persistence.Converter;
+
+@Converter(autoApply = false)
+public class AnnounceEventTypeConverter implements AttributeConverter<AnnounceEventType, String> {
+ @Override
+ public String convertToDatabaseColumn(AnnounceEventType attribute) {
+ if (attribute == null) {
+ return null;
+ }
+ return attribute.getKey(); // 比如 "completed"
+ }
+
+ @Override
+ public AnnounceEventType convertToEntityAttribute(String dbData) {
+ return AnnounceEventType.fromName(dbData);
+ }
+}
+
diff --git a/src/main/resources/ppt.sql b/src/main/resources/ppt.sql
index 1181c77..c4b8c5c 100644
--- a/src/main/resources/ppt.sql
+++ b/src/main/resources/ppt.sql
@@ -1,729 +1,729 @@
-/*
- Navicat Premium Dump SQL
-
- Source Server : first
- Source Server Type : MySQL
- Source Server Version : 80036 (8.0.36)
- Source Host : localhost:3306
- Source Schema : ppt
-
- Target Server Type : MySQL
- Target Server Version : 80036 (8.0.36)
- File Encoding : 65001
-
- Date: 04/06/2025 14:33:40
-*/
-
-SET NAMES utf8mb4;
-SET FOREIGN_KEY_CHECKS = 0;
-
--- ----------------------------
--- Table structure for categories
--- ----------------------------
-DROP TABLE IF EXISTS `categories`;
-CREATE TABLE `categories` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_categories_slug`(`slug` ASC) USING BTREE,
- UNIQUE INDEX `UKoul14ho7bctbefv8jywp5v3i2`(`slug` ASC) USING BTREE,
- INDEX `idx_categories_slug`(`slug` ASC) USING BTREE,
- INDEX `IDXoul14ho7bctbefv8jywp5v3i2`(`slug` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of categories
--- ----------------------------
-INSERT INTO `categories` VALUES (1, 'os', '操作系统', 'os-icon.png');
-
--- ----------------------------
--- Table structure for exam_plans
--- ----------------------------
-DROP TABLE IF EXISTS `exam_plans`;
-CREATE TABLE `exam_plans` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `downloaded` bigint NOT NULL,
- `duration` bigint NOT NULL,
- `karma` double NOT NULL,
- `seeding_time` bigint NOT NULL,
- `seeds` bigint NOT NULL,
- `share_ratio` double NOT NULL,
- `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `uploaded` bigint NOT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `UK74jaepieaj2umswpqn16yy3x5`(`slug` ASC) USING BTREE,
- INDEX `IDX74jaepieaj2umswpqn16yy3x5`(`slug` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of exam_plans
--- ----------------------------
-
--- ----------------------------
--- Table structure for exams
--- ----------------------------
-DROP TABLE IF EXISTS `exams`;
-CREATE TABLE `exams` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `end_at` datetime(6) NOT NULL,
- `exam_plan_id` bigint NULL DEFAULT NULL,
- `user_id` bigint NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `UK2wii0igd3vdfecy00op0un4qt`(`user_id` ASC) USING BTREE,
- INDEX `IDX2wii0igd3vdfecy00op0un4qt`(`user_id` ASC) USING BTREE,
- INDEX `FKl0cips1gany3cuppyfs7ntpai`(`exam_plan_id` ASC) USING BTREE,
- CONSTRAINT `FKi63cpl1xkgy32iq68ru4ypjn4` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
- CONSTRAINT `FKl0cips1gany3cuppyfs7ntpai` FOREIGN KEY (`exam_plan_id`) REFERENCES `exam_plans` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of exams
--- ----------------------------
-
--- ----------------------------
--- Table structure for login_history
--- ----------------------------
-DROP TABLE IF EXISTS `login_history`;
-CREATE TABLE `login_history` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `user_id` bigint NOT NULL,
- `time` timestamp NOT NULL,
- `type` enum('ACCOUNT','PASSKEY','PERSONAL_ACCESSTOKEN','PROGRAM_INTERNAL','TWO_STEP_VERIFICATION') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `ip_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `user_agent` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- INDEX `idx_login_time`(`time` ASC) USING BTREE,
- INDEX `fk_loginhistory_user`(`user_id` ASC) USING BTREE,
- INDEX `IDX3lft44makrxommxm63k7xj77d`(`time` ASC) USING BTREE,
- CONSTRAINT `fk_loginhistory_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 33 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of login_history
--- ----------------------------
-INSERT INTO `login_history` VALUES (1, 1, '2025-06-03 12:25:33', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (2, 1, '2025-06-03 12:51:42', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (3, 1, '2025-06-03 12:52:55', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (4, 1, '2025-06-03 14:20:55', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (5, 1, '2025-06-03 14:31:13', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (6, 1, '2025-06-04 03:40:10', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.44.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (7, 1, '2025-06-04 03:43:09', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (8, 1, '2025-06-04 03:44:27', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (9, 1, '2025-06-04 03:51:35', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (10, 1, '2025-06-04 03:52:22', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (11, 1, '2025-06-04 03:52:53', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (12, 1, '2025-06-04 03:53:12', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (13, 1, '2025-06-04 03:54:46', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (14, 1, '2025-06-04 03:58:14', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (15, 1, '2025-06-04 04:22:30', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (16, 1, '2025-06-04 04:43:29', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (17, 1, '2025-06-04 04:54:09', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (18, 1, '2025-06-04 04:59:13', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (19, 1, '2025-06-04 05:17:07', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (20, 1, '2025-06-04 05:18:28', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (21, 1, '2025-06-04 05:21:25', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (22, 1, '2025-06-04 05:21:58', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (23, 1, '2025-06-04 05:22:24', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (24, 1, '2025-06-04 05:22:30', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (25, 1, '2025-06-04 05:27:44', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (26, 1, '2025-06-04 05:27:50', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (27, 1, '2025-06-04 05:31:45', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (28, 1, '2025-06-04 05:33:00', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (29, 1, '2025-06-04 06:11:31', 'PASSKEY', '192.168.254.1', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (30, 1, '2025-06-04 06:12:13', 'PASSKEY', '192.168.254.1', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (31, 1, '2025-06-04 06:12:27', 'PASSKEY', '192.168.254.1', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (32, 1, '2025-06-04 06:13:21', 'PASSKEY', '192.168.254.1', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-
--- ----------------------------
--- Table structure for peers
--- ----------------------------
-DROP TABLE IF EXISTS `peers`;
-CREATE TABLE `peers` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `port` int NOT NULL,
- `info_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `peer_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `user_agent` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `uploaded` bigint NOT NULL,
- `downloaded` bigint NOT NULL,
- `to_go` bigint NOT NULL,
- `seeder` tinyint(1) NOT NULL,
- `partial_seeder` tinyint(1) NOT NULL,
- `passkey` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `update_at` timestamp NOT NULL,
- `seeding_time` bigint NOT NULL,
- `upload_speed` bigint NOT NULL,
- `download_speed` bigint NOT NULL,
- `user_id` bigint NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_peers_ip_port_infohash`(`ip` ASC, `port` ASC, `info_hash` ASC) USING BTREE,
- UNIQUE INDEX `UKoa8l3xqdvxr898mosks3hq3cb`(`ip` ASC, `port` ASC, `info_hash` ASC) USING BTREE,
- INDEX `idx_peers_update_at`(`update_at` ASC) USING BTREE,
- INDEX `fk_peers_user`(`user_id` ASC) USING BTREE,
- INDEX `IDXmmvk33liy7j5u9e4qhxw2d7h5`(`update_at` ASC) USING BTREE,
- CONSTRAINT `fk_peers_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for permissions
--- ----------------------------
-DROP TABLE IF EXISTS `permissions`;
-CREATE TABLE `permissions` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `def` tinyint(1) NOT NULL,
- `user_group_id` bigint NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_permissions_slug`(`slug` ASC) USING BTREE,
- UNIQUE INDEX `UKdv6mwikptsu70hcrjq07sqsfy`(`slug` ASC) USING BTREE,
- INDEX `fk_permissions_user_group`(`user_group_id` ASC) USING BTREE,
- CONSTRAINT `fk_permissions_user_group` FOREIGN KEY (`user_group_id`) REFERENCES `user_groups` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of permissions
--- ----------------------------
-INSERT INTO `permissions` VALUES (1, 'torrent:upload', 1, 1);
-INSERT INTO `permissions` VALUES (2, 'torrent:download', 1, 1);
-INSERT INTO `permissions` VALUES (3, 'torrent:view', 1, 1);
-INSERT INTO `permissions` VALUES (4, 'torrent:search', 1, 1);
-INSERT INTO `permissions` VALUES (5, 'comment:create', 1, 1);
-INSERT INTO `permissions` VALUES (6, 'user:manage', 1, 1);
-INSERT INTO `permissions` VALUES (7, 'torrent:approve', 1, 1);
-INSERT INTO `permissions` VALUES (8, 'torrent:thanks', 1, 1);
-INSERT INTO `permissions` VALUES (9, 'promotion:list', 1, 1);
-
--- ----------------------------
--- Table structure for promotion_policies
--- ----------------------------
-DROP TABLE IF EXISTS `promotion_policies`;
-CREATE TABLE `promotion_policies` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `upload_ratio` double NULL DEFAULT NULL,
- `download_ratio` double NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_promotion_policies_slug`(`slug` ASC) USING BTREE,
- UNIQUE INDEX `UKcjqpe1g15outfc0u6ajvpwxoe`(`slug` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of promotion_policies
--- ----------------------------
-INSERT INTO `promotion_policies` VALUES (1, 'default', '默认策略', 1, 1);
-INSERT INTO `promotion_policies` VALUES (2, 'vip', '活跃用户策略', 1, 1.5);
-
--- ----------------------------
--- Table structure for qrtz_blob_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_blob_triggers`;
-CREATE TABLE `qrtz_blob_triggers` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `BLOB_DATA` blob NULL,
- PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
- INDEX `SCHED_NAME`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE,
- CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_blob_triggers
--- ----------------------------
-
--- ----------------------------
--- Table structure for qrtz_calendars
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_calendars`;
-CREATE TABLE `qrtz_calendars` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `CALENDAR` blob NOT NULL,
- PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_calendars
--- ----------------------------
-
--- ----------------------------
--- Table structure for qrtz_cron_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_cron_triggers`;
-CREATE TABLE `qrtz_cron_triggers` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `CRON_EXPRESSION` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TIME_ZONE_ID` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
- CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_cron_triggers
--- ----------------------------
-
--- ----------------------------
--- Table structure for qrtz_fired_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_fired_triggers`;
-CREATE TABLE `qrtz_fired_triggers` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `ENTRY_ID` varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `FIRED_TIME` bigint NOT NULL,
- `SCHED_TIME` bigint NOT NULL,
- `PRIORITY` int NOT NULL,
- `STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`) USING BTREE,
- INDEX `IDX_QRTZ_FT_TRIG_INST_NAME`(`SCHED_NAME` ASC, `INSTANCE_NAME` ASC) USING BTREE,
- INDEX `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY`(`SCHED_NAME` ASC, `INSTANCE_NAME` ASC, `REQUESTS_RECOVERY` ASC) USING BTREE,
- INDEX `IDX_QRTZ_FT_J_G`(`SCHED_NAME` ASC, `JOB_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
- INDEX `IDX_QRTZ_FT_JG`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
- INDEX `IDX_QRTZ_FT_T_G`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE,
- INDEX `IDX_QRTZ_FT_TG`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_fired_triggers
--- ----------------------------
-
--- ----------------------------
--- Table structure for qrtz_job_details
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_job_details`;
-CREATE TABLE `qrtz_job_details` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `IS_DURABLE` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `JOB_DATA` blob NULL,
- PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE,
- INDEX `IDX_QRTZ_J_REQ_RECOVERY`(`SCHED_NAME` ASC, `REQUESTS_RECOVERY` ASC) USING BTREE,
- INDEX `IDX_QRTZ_J_GRP`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_job_details
--- ----------------------------
-INSERT INTO `qrtz_job_details` VALUES ('sapling_scheduler', 'peers_cleanup', 'DEFAULT', 'Peers Cleanup', 'com.github.example.pt.crontask.PeersCleanup', '1', '0', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787000737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F40000000000010770800000010000000007800);
-
--- ----------------------------
--- Table structure for qrtz_locks
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_locks`;
-CREATE TABLE `qrtz_locks` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `LOCK_NAME` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- PRIMARY KEY (`SCHED_NAME`, `LOCK_NAME`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_locks
--- ----------------------------
-INSERT INTO `qrtz_locks` VALUES ('sapling_scheduler', 'STATE_ACCESS');
-INSERT INTO `qrtz_locks` VALUES ('sapling_scheduler', 'TRIGGER_ACCESS');
-
--- ----------------------------
--- Table structure for qrtz_paused_trigger_grps
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`;
-CREATE TABLE `qrtz_paused_trigger_grps` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_paused_trigger_grps
--- ----------------------------
-
--- ----------------------------
--- Table structure for qrtz_scheduler_state
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_scheduler_state`;
-CREATE TABLE `qrtz_scheduler_state` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `LAST_CHECKIN_TIME` bigint NOT NULL,
- `CHECKIN_INTERVAL` bigint NOT NULL,
- PRIMARY KEY (`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_scheduler_state
--- ----------------------------
-INSERT INTO `qrtz_scheduler_state` VALUES ('sapling_scheduler', 'LAPTOP-V24K5A551749018489588', 1749018510182, 10000);
-
--- ----------------------------
--- Table structure for qrtz_simple_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_simple_triggers`;
-CREATE TABLE `qrtz_simple_triggers` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `REPEAT_COUNT` bigint NOT NULL,
- `REPEAT_INTERVAL` bigint NOT NULL,
- `TIMES_TRIGGERED` bigint NOT NULL,
- PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
- CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_simple_triggers
--- ----------------------------
-INSERT INTO `qrtz_simple_triggers` VALUES ('sapling_scheduler', '6da64b5bd2ee-37ffa82a-a598-485c-9718-40ee90c26bc4', 'DEFAULT', -1, 1800000, 1);
-
--- ----------------------------
--- Table structure for qrtz_simprop_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_simprop_triggers`;
-CREATE TABLE `qrtz_simprop_triggers` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `STR_PROP_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `STR_PROP_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `STR_PROP_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `INT_PROP_1` int NULL DEFAULT NULL,
- `INT_PROP_2` int NULL DEFAULT NULL,
- `LONG_PROP_1` bigint NULL DEFAULT NULL,
- `LONG_PROP_2` bigint NULL DEFAULT NULL,
- `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL,
- `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL,
- `BOOL_PROP_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `BOOL_PROP_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
- CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_simprop_triggers
--- ----------------------------
-
--- ----------------------------
--- Table structure for qrtz_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_triggers`;
-CREATE TABLE `qrtz_triggers` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `NEXT_FIRE_TIME` bigint NULL DEFAULT NULL,
- `PREV_FIRE_TIME` bigint NULL DEFAULT NULL,
- `PRIORITY` int NULL DEFAULT NULL,
- `TRIGGER_STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_TYPE` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `START_TIME` bigint NOT NULL,
- `END_TIME` bigint NULL DEFAULT NULL,
- `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `MISFIRE_INSTR` smallint NULL DEFAULT NULL,
- `JOB_DATA` blob NULL,
- PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
- INDEX `IDX_QRTZ_T_J`(`SCHED_NAME` ASC, `JOB_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_JG`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_C`(`SCHED_NAME` ASC, `CALENDAR_NAME` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_G`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_STATE`(`SCHED_NAME` ASC, `TRIGGER_STATE` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_N_STATE`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_N_G_STATE`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_NEXT_FIRE_TIME`(`SCHED_NAME` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_NFT_ST`(`SCHED_NAME` ASC, `TRIGGER_STATE` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_NFT_MISFIRE`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC, `TRIGGER_STATE` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE,
- CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_triggers
--- ----------------------------
-INSERT INTO `qrtz_triggers` VALUES ('sapling_scheduler', '6da64b5bd2ee-37ffa82a-a598-485c-9718-40ee90c26bc4', 'DEFAULT', 'peers_cleanup', 'DEFAULT', NULL, 1749020288505, 1749018488505, 5, 'WAITING', 'SIMPLE', 1749018488505, 0, NULL, 0, '');
-
--- ----------------------------
--- Table structure for seedbox
--- ----------------------------
-DROP TABLE IF EXISTS `seedbox`;
-CREATE TABLE `seedbox` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `download_multiplier_id` bigint NULL DEFAULT NULL,
- `upload_multiplier_id` bigint NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `UKecbehjtg3bfr4rmyixt1gcvfq`(`address` ASC) USING BTREE,
- INDEX `FKq63tqhykgl96l4rkwy9widy5b`(`download_multiplier_id` ASC) USING BTREE,
- INDEX `FK9xl51na3dn8k7ou8cyv7s1wrf`(`upload_multiplier_id` ASC) USING BTREE,
- CONSTRAINT `FK9xl51na3dn8k7ou8cyv7s1wrf` FOREIGN KEY (`upload_multiplier_id`) REFERENCES `promotion_policies` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
- CONSTRAINT `FKq63tqhykgl96l4rkwy9widy5b` FOREIGN KEY (`download_multiplier_id`) REFERENCES `promotion_policies` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of seedbox
--- ----------------------------
-
--- ----------------------------
--- Table structure for settings
--- ----------------------------
-DROP TABLE IF EXISTS `settings`;
-CREATE TABLE `settings` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `setting_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `setting_value` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_settings_setting_key`(`setting_key` ASC) USING BTREE,
- UNIQUE INDEX `UKswd05dvj4ukvw5q135bpbbfae`(`setting_key` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Table structure for tags
--- ----------------------------
-DROP TABLE IF EXISTS `tags`;
-CREATE TABLE `tags` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_tags_name`(`name` ASC) USING BTREE,
- UNIQUE INDEX `UKt48xdq560gs3gap9g7jg36kgc`(`name` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of tags
--- ----------------------------
-INSERT INTO `tags` VALUES (9, '[\"linux\"]');
-INSERT INTO `tags` VALUES (3, 'debian');
-INSERT INTO `tags` VALUES (1, 'linux');
-INSERT INTO `tags` VALUES (5, 'macos');
-INSERT INTO `tags` VALUES (2, 'ubuntu');
-INSERT INTO `tags` VALUES (4, 'windows');
-
--- ----------------------------
--- Table structure for thanks
--- ----------------------------
-DROP TABLE IF EXISTS `thanks`;
-CREATE TABLE `thanks` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `torrent_id` bigint NULL DEFAULT NULL,
- `user_id` bigint NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `UKrt9lg0h53brgpf9iat5hcmf6g`(`user_id` ASC, `torrent_id` ASC) USING BTREE,
- INDEX `FKp3kgh25tko48vq7x6u2w3dvpp`(`torrent_id` ASC) USING BTREE,
- CONSTRAINT `FK2t90h21s5hyx6hynewsdlk46j` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
- CONSTRAINT `FKp3kgh25tko48vq7x6u2w3dvpp` FOREIGN KEY (`torrent_id`) REFERENCES `torrents` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of thanks
--- ----------------------------
-
--- ----------------------------
--- Table structure for torrents
--- ----------------------------
-DROP TABLE IF EXISTS `torrents`;
-CREATE TABLE `torrents` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `info_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `user_id` bigint NULL DEFAULT NULL,
- `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `sub_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `size` bigint NOT NULL,
- `created_at` timestamp NOT NULL,
- `updated_at` timestamp NOT NULL,
- `under_review` tinyint(1) NOT NULL,
- `anonymous` tinyint(1) NOT NULL,
- `category_id` bigint NULL DEFAULT NULL,
- `promotion_policy_id` bigint NULL DEFAULT NULL,
- `description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_torrents_info_hash`(`info_hash` ASC) USING BTREE,
- UNIQUE INDEX `UKhag2ej1vo8snvirb1lv4b8r4x`(`info_hash` ASC) USING BTREE,
- INDEX `idx_torrents_title`(`title` ASC) USING BTREE,
- INDEX `idx_torrents_sub_title`(`sub_title` ASC) USING BTREE,
- INDEX `idx_torrents_promotion_policy_id`(`promotion_policy_id` ASC) USING BTREE,
- INDEX `fk_torrents_user`(`user_id` ASC) USING BTREE,
- INDEX `fk_torrents_category`(`category_id` ASC) USING BTREE,
- INDEX `IDXdplkaapqslelnscuunfpm9eb6`(`title` ASC) USING BTREE,
- INDEX `IDX6r5kh6i4awpdlytjmm06pk22k`(`sub_title` ASC) USING BTREE,
- INDEX `IDXd2j3h8td7682cctkv5o77b33y`(`promotion_policy_id` ASC) USING BTREE,
- CONSTRAINT `fk_torrents_category` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT,
- CONSTRAINT `fk_torrents_promotion_policy` FOREIGN KEY (`promotion_policy_id`) REFERENCES `promotion_policies` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT,
- CONSTRAINT `fk_torrents_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of torrents
--- ----------------------------
-INSERT INTO `torrents` VALUES (7, '499e9c69e90b976c5c84542cf9b88fad1e12ef1c', 1, 'example torrent title', 'subtitle here', 66194, '2025-06-04 03:41:27', '2025-06-04 03:41:27', 0, 0, 1, 1, '演示种子');
-INSERT INTO `torrents` VALUES (8, 'f45775564c88b5a2782a301d162e1d4811b0b6d5', 1, 'example torrent title', 'subtitle here', 231105, '2025-06-04 05:20:37', '2025-06-04 05:20:37', 0, 0, 1, 1, '演示种子');
-INSERT INTO `torrents` VALUES (9, '8e10c9daa1b5fb18dc5b0e73988808ba958391fa', 1, 'example torrent title', 'subtitle here', 426155, '2025-06-04 06:03:49', '2025-06-04 06:03:49', 0, 0, 1, 1, '演示种子');
-INSERT INTO `torrents` VALUES (10, '1e3275f54ec074af2d99828311d4a8488eb7a487', 1, 'example torrent title', 'subtitle here', 13861694, '2025-06-04 06:10:23', '2025-06-04 06:10:23', 0, 0, 1, 1, '演示种子');
-
--- ----------------------------
--- Table structure for torrents_tag
--- ----------------------------
-DROP TABLE IF EXISTS `torrents_tag`;
-CREATE TABLE `torrents_tag` (
- `torrent_id` bigint NOT NULL,
- `tag_id` bigint NOT NULL,
- PRIMARY KEY (`torrent_id`, `tag_id`) USING BTREE,
- INDEX `fk_torrents_tag_tag`(`tag_id` ASC) USING BTREE,
- CONSTRAINT `fk_torrents_tag_tag` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT,
- CONSTRAINT `fk_torrents_tag_torrent` FOREIGN KEY (`torrent_id`) REFERENCES `torrents` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of torrents_tag
--- ----------------------------
-INSERT INTO `torrents_tag` VALUES (7, 9);
-INSERT INTO `torrents_tag` VALUES (8, 9);
-INSERT INTO `torrents_tag` VALUES (9, 9);
-INSERT INTO `torrents_tag` VALUES (10, 9);
-
--- ----------------------------
--- Table structure for transfer_history
--- ----------------------------
-DROP TABLE IF EXISTS `transfer_history`;
-CREATE TABLE `transfer_history` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `user_id` bigint NOT NULL,
- `torrent_id` bigint NOT NULL,
- `to_go` bigint NOT NULL,
- `started_at` timestamp NOT NULL,
- `updated_at` timestamp NOT NULL,
- `uploaded` bigint NOT NULL,
- `downloaded` bigint NOT NULL,
- `actual_uploaded` bigint NOT NULL,
- `actual_downloaded` bigint NOT NULL,
- `upload_speed` bigint NOT NULL,
- `download_speed` bigint NOT NULL,
- `last_event` enum('started','completed','stopped','paused','unknown') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `have_complete_history` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_user_torrent`(`user_id` ASC, `torrent_id` ASC) USING BTREE,
- UNIQUE INDEX `UKrm5p4xv3rb2vm6psql5je94jh`(`user_id` ASC, `torrent_id` ASC) USING BTREE,
- INDEX `fk_transfer_torrent`(`torrent_id` ASC) USING BTREE,
- CONSTRAINT `fk_transfer_torrent` FOREIGN KEY (`torrent_id`) REFERENCES `torrents` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
- CONSTRAINT `fk_transfer_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of transfer_history
--- ----------------------------
-INSERT INTO `transfer_history` VALUES (1, 1, 7, 66194, '2025-06-04 04:43:30', '2025-06-04 05:21:25', 0, 0, 0, 0, 0, 0, 'completed', 1);
-INSERT INTO `transfer_history` VALUES (2, 1, 10, 0, '2025-06-04 06:11:31', '2025-06-04 06:13:21', 27723388, 0, 0, 27723388, 0, 77874, 'started', 1);
-
--- ----------------------------
--- Table structure for user_groups
--- ----------------------------
-DROP TABLE IF EXISTS `user_groups`;
-CREATE TABLE `user_groups` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `promotion_policy_id` bigint NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_user_groups_slug`(`slug` ASC) USING BTREE,
- UNIQUE INDEX `UKkkje1jbmrkam1k7jbd39homw0`(`slug` ASC) USING BTREE,
- INDEX `fk_user_groups_promotion_policy`(`promotion_policy_id` ASC) USING BTREE,
- CONSTRAINT `fk_user_groups_promotion_policy` FOREIGN KEY (`promotion_policy_id`) REFERENCES `promotion_policies` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of user_groups
--- ----------------------------
-INSERT INTO `user_groups` VALUES (1, 'default', '默认用户组', 1);
-INSERT INTO `user_groups` VALUES (2, 'vip', '活跃用户组', 2);
-
--- ----------------------------
--- Table structure for user_groups_permission_entities
--- ----------------------------
-DROP TABLE IF EXISTS `user_groups_permission_entities`;
-CREATE TABLE `user_groups_permission_entities` (
- `user_group_id` bigint NOT NULL,
- `permission_entities_id` bigint NOT NULL,
- PRIMARY KEY (`user_group_id`, `permission_entities_id`) USING BTREE,
- UNIQUE INDEX `UK_95j9uaq96bvd9ykn0sngywks6`(`permission_entities_id` ASC) USING BTREE,
- CONSTRAINT `fk_ugpe_permission` FOREIGN KEY (`permission_entities_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT,
- CONSTRAINT `fk_ugpe_user_group` FOREIGN KEY (`user_group_id`) REFERENCES `user_groups` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of user_groups_permission_entities
--- ----------------------------
-INSERT INTO `user_groups_permission_entities` VALUES (1, 1);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 2);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 3);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 4);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 5);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 6);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 7);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 8);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 9);
-
--- ----------------------------
--- Table structure for users
--- ----------------------------
-DROP TABLE IF EXISTS `users`;
-CREATE TABLE `users` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `group_id` bigint NULL DEFAULT NULL,
- `passkey` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `create_at` timestamp NOT NULL,
- `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `custom_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `signature` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `language` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `download_bandwidth` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `upload_bandwidth` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `downloaded` bigint NOT NULL,
- `uploaded` bigint NOT NULL,
- `real_downloaded` bigint NOT NULL,
- `real_uploaded` bigint NOT NULL,
- `isp` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `karma` decimal(19, 2) NOT NULL,
- `invite_slot` int NOT NULL,
- `seeding_time` bigint NOT NULL,
- `personal_access_token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `privacy_level` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_users_username`(`username` ASC) USING BTREE,
- UNIQUE INDEX `uk_users_email`(`email` ASC) USING BTREE,
- UNIQUE INDEX `uk_users_passkey`(`passkey` ASC) USING BTREE,
- UNIQUE INDEX `UKr43af9ap4edm43mmtq01oddj6`(`username` ASC) USING BTREE,
- UNIQUE INDEX `UK6dotkott2kjsp8vw4d0m25fb7`(`email` ASC) USING BTREE,
- UNIQUE INDEX `UK402sx6cqgk66uwt7eyf54tmij`(`passkey` ASC) USING BTREE,
- INDEX `fk_users_group`(`group_id` ASC) USING BTREE,
- CONSTRAINT `fk_users_group` FOREIGN KEY (`group_id`) REFERENCES `user_groups` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- 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');
-
-SET FOREIGN_KEY_CHECKS = 1;
+/*
+ Navicat Premium Dump SQL
+
+ Source Server : first
+ Source Server Type : MySQL
+ Source Server Version : 80036 (8.0.36)
+ Source Host : localhost:3306
+ Source Schema : ppt
+
+ Target Server Type : MySQL
+ Target Server Version : 80036 (8.0.36)
+ File Encoding : 65001
+
+ Date: 04/06/2025 14:33:40
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for categories
+-- ----------------------------
+DROP TABLE IF EXISTS `categories`;
+CREATE TABLE `categories` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_categories_slug`(`slug` ASC) USING BTREE,
+ UNIQUE INDEX `UKoul14ho7bctbefv8jywp5v3i2`(`slug` ASC) USING BTREE,
+ INDEX `idx_categories_slug`(`slug` ASC) USING BTREE,
+ INDEX `IDXoul14ho7bctbefv8jywp5v3i2`(`slug` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of categories
+-- ----------------------------
+INSERT INTO `categories` VALUES (1, 'os', '操作系统', 'os-icon.png');
+
+-- ----------------------------
+-- Table structure for exam_plans
+-- ----------------------------
+DROP TABLE IF EXISTS `exam_plans`;
+CREATE TABLE `exam_plans` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `downloaded` bigint NOT NULL,
+ `duration` bigint NOT NULL,
+ `karma` double NOT NULL,
+ `seeding_time` bigint NOT NULL,
+ `seeds` bigint NOT NULL,
+ `share_ratio` double NOT NULL,
+ `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `uploaded` bigint NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `UK74jaepieaj2umswpqn16yy3x5`(`slug` ASC) USING BTREE,
+ INDEX `IDX74jaepieaj2umswpqn16yy3x5`(`slug` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of exam_plans
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for exams
+-- ----------------------------
+DROP TABLE IF EXISTS `exams`;
+CREATE TABLE `exams` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `end_at` datetime(6) NOT NULL,
+ `exam_plan_id` bigint NULL DEFAULT NULL,
+ `user_id` bigint NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `UK2wii0igd3vdfecy00op0un4qt`(`user_id` ASC) USING BTREE,
+ INDEX `IDX2wii0igd3vdfecy00op0un4qt`(`user_id` ASC) USING BTREE,
+ INDEX `FKl0cips1gany3cuppyfs7ntpai`(`exam_plan_id` ASC) USING BTREE,
+ CONSTRAINT `FKi63cpl1xkgy32iq68ru4ypjn4` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ CONSTRAINT `FKl0cips1gany3cuppyfs7ntpai` FOREIGN KEY (`exam_plan_id`) REFERENCES `exam_plans` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of exams
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for login_history
+-- ----------------------------
+DROP TABLE IF EXISTS `login_history`;
+CREATE TABLE `login_history` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `user_id` bigint NOT NULL,
+ `time` timestamp NOT NULL,
+ `type` enum('ACCOUNT','PASSKEY','PERSONAL_ACCESSTOKEN','PROGRAM_INTERNAL','TWO_STEP_VERIFICATION') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `ip_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `user_agent` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `idx_login_time`(`time` ASC) USING BTREE,
+ INDEX `fk_loginhistory_user`(`user_id` ASC) USING BTREE,
+ INDEX `IDX3lft44makrxommxm63k7xj77d`(`time` ASC) USING BTREE,
+ CONSTRAINT `fk_loginhistory_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 33 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of login_history
+-- ----------------------------
+INSERT INTO `login_history` VALUES (1, 1, '2025-06-03 12:25:33', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (2, 1, '2025-06-03 12:51:42', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (3, 1, '2025-06-03 12:52:55', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (4, 1, '2025-06-03 14:20:55', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (5, 1, '2025-06-03 14:31:13', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (6, 1, '2025-06-04 03:40:10', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.44.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (7, 1, '2025-06-04 03:43:09', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (8, 1, '2025-06-04 03:44:27', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (9, 1, '2025-06-04 03:51:35', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (10, 1, '2025-06-04 03:52:22', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (11, 1, '2025-06-04 03:52:53', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (12, 1, '2025-06-04 03:53:12', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (13, 1, '2025-06-04 03:54:46', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (14, 1, '2025-06-04 03:58:14', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (15, 1, '2025-06-04 04:22:30', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (16, 1, '2025-06-04 04:43:29', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (17, 1, '2025-06-04 04:54:09', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (18, 1, '2025-06-04 04:59:13', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (19, 1, '2025-06-04 05:17:07', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (20, 1, '2025-06-04 05:18:28', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (21, 1, '2025-06-04 05:21:25', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (22, 1, '2025-06-04 05:21:58', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (23, 1, '2025-06-04 05:22:24', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (24, 1, '2025-06-04 05:22:30', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (25, 1, '2025-06-04 05:27:44', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (26, 1, '2025-06-04 05:27:50', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (27, 1, '2025-06-04 05:31:45', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (28, 1, '2025-06-04 05:33:00', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (29, 1, '2025-06-04 06:11:31', 'PASSKEY', '192.168.254.1', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (30, 1, '2025-06-04 06:12:13', 'PASSKEY', '192.168.254.1', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (31, 1, '2025-06-04 06:12:27', 'PASSKEY', '192.168.254.1', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (32, 1, '2025-06-04 06:13:21', 'PASSKEY', '192.168.254.1', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+
+-- ----------------------------
+-- Table structure for peers
+-- ----------------------------
+DROP TABLE IF EXISTS `peers`;
+CREATE TABLE `peers` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `port` int NOT NULL,
+ `info_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `peer_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `user_agent` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `uploaded` bigint NOT NULL,
+ `downloaded` bigint NOT NULL,
+ `to_go` bigint NOT NULL,
+ `seeder` tinyint(1) NOT NULL,
+ `partial_seeder` tinyint(1) NOT NULL,
+ `passkey` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `update_at` timestamp NOT NULL,
+ `seeding_time` bigint NOT NULL,
+ `upload_speed` bigint NOT NULL,
+ `download_speed` bigint NOT NULL,
+ `user_id` bigint NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_peers_ip_port_infohash`(`ip` ASC, `port` ASC, `info_hash` ASC) USING BTREE,
+ UNIQUE INDEX `UKoa8l3xqdvxr898mosks3hq3cb`(`ip` ASC, `port` ASC, `info_hash` ASC) USING BTREE,
+ INDEX `idx_peers_update_at`(`update_at` ASC) USING BTREE,
+ INDEX `fk_peers_user`(`user_id` ASC) USING BTREE,
+ INDEX `IDXmmvk33liy7j5u9e4qhxw2d7h5`(`update_at` ASC) USING BTREE,
+ CONSTRAINT `fk_peers_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+
+-- ----------------------------
+-- Table structure for permissions
+-- ----------------------------
+DROP TABLE IF EXISTS `permissions`;
+CREATE TABLE `permissions` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `def` tinyint(1) NOT NULL,
+ `user_group_id` bigint NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_permissions_slug`(`slug` ASC) USING BTREE,
+ UNIQUE INDEX `UKdv6mwikptsu70hcrjq07sqsfy`(`slug` ASC) USING BTREE,
+ INDEX `fk_permissions_user_group`(`user_group_id` ASC) USING BTREE,
+ CONSTRAINT `fk_permissions_user_group` FOREIGN KEY (`user_group_id`) REFERENCES `user_groups` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of permissions
+-- ----------------------------
+INSERT INTO `permissions` VALUES (1, 'torrent:upload', 1, 1);
+INSERT INTO `permissions` VALUES (2, 'torrent:download', 1, 1);
+INSERT INTO `permissions` VALUES (3, 'torrent:view', 1, 1);
+INSERT INTO `permissions` VALUES (4, 'torrent:search', 1, 1);
+INSERT INTO `permissions` VALUES (5, 'comment:create', 1, 1);
+INSERT INTO `permissions` VALUES (6, 'user:manage', 1, 1);
+INSERT INTO `permissions` VALUES (7, 'torrent:approve', 1, 1);
+INSERT INTO `permissions` VALUES (8, 'torrent:thanks', 1, 1);
+INSERT INTO `permissions` VALUES (9, 'promotion:list', 1, 1);
+
+-- ----------------------------
+-- Table structure for promotion_policies
+-- ----------------------------
+DROP TABLE IF EXISTS `promotion_policies`;
+CREATE TABLE `promotion_policies` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `upload_ratio` double NULL DEFAULT NULL,
+ `download_ratio` double NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_promotion_policies_slug`(`slug` ASC) USING BTREE,
+ UNIQUE INDEX `UKcjqpe1g15outfc0u6ajvpwxoe`(`slug` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of promotion_policies
+-- ----------------------------
+INSERT INTO `promotion_policies` VALUES (1, 'default', '默认策略', 1, 1);
+INSERT INTO `promotion_policies` VALUES (2, 'vip', '活跃用户策略', 1, 1.5);
+
+-- ----------------------------
+-- Table structure for qrtz_blob_triggers
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_blob_triggers`;
+CREATE TABLE `qrtz_blob_triggers` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `BLOB_DATA` blob NULL,
+ PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
+ INDEX `SCHED_NAME`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE,
+ CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_blob_triggers
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for qrtz_calendars
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_calendars`;
+CREATE TABLE `qrtz_calendars` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `CALENDAR` blob NOT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_calendars
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for qrtz_cron_triggers
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_cron_triggers`;
+CREATE TABLE `qrtz_cron_triggers` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `CRON_EXPRESSION` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TIME_ZONE_ID` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
+ CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_cron_triggers
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for qrtz_fired_triggers
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_fired_triggers`;
+CREATE TABLE `qrtz_fired_triggers` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `ENTRY_ID` varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `FIRED_TIME` bigint NOT NULL,
+ `SCHED_TIME` bigint NOT NULL,
+ `PRIORITY` int NOT NULL,
+ `STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`) USING BTREE,
+ INDEX `IDX_QRTZ_FT_TRIG_INST_NAME`(`SCHED_NAME` ASC, `INSTANCE_NAME` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY`(`SCHED_NAME` ASC, `INSTANCE_NAME` ASC, `REQUESTS_RECOVERY` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_FT_J_G`(`SCHED_NAME` ASC, `JOB_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_FT_JG`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_FT_T_G`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_FT_TG`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_fired_triggers
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for qrtz_job_details
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_job_details`;
+CREATE TABLE `qrtz_job_details` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `IS_DURABLE` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `JOB_DATA` blob NULL,
+ PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE,
+ INDEX `IDX_QRTZ_J_REQ_RECOVERY`(`SCHED_NAME` ASC, `REQUESTS_RECOVERY` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_J_GRP`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_job_details
+-- ----------------------------
+INSERT INTO `qrtz_job_details` VALUES ('sapling_scheduler', 'peers_cleanup', 'DEFAULT', 'Peers Cleanup', 'com.github.example.pt.crontask.PeersCleanup', '1', '0', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787000737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F40000000000010770800000010000000007800);
+
+-- ----------------------------
+-- Table structure for qrtz_locks
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_locks`;
+CREATE TABLE `qrtz_locks` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `LOCK_NAME` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `LOCK_NAME`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_locks
+-- ----------------------------
+INSERT INTO `qrtz_locks` VALUES ('sapling_scheduler', 'STATE_ACCESS');
+INSERT INTO `qrtz_locks` VALUES ('sapling_scheduler', 'TRIGGER_ACCESS');
+
+-- ----------------------------
+-- Table structure for qrtz_paused_trigger_grps
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`;
+CREATE TABLE `qrtz_paused_trigger_grps` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_paused_trigger_grps
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for qrtz_scheduler_state
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_scheduler_state`;
+CREATE TABLE `qrtz_scheduler_state` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `LAST_CHECKIN_TIME` bigint NOT NULL,
+ `CHECKIN_INTERVAL` bigint NOT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_scheduler_state
+-- ----------------------------
+INSERT INTO `qrtz_scheduler_state` VALUES ('sapling_scheduler', 'LAPTOP-V24K5A551749018489588', 1749018510182, 10000);
+
+-- ----------------------------
+-- Table structure for qrtz_simple_triggers
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_simple_triggers`;
+CREATE TABLE `qrtz_simple_triggers` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `REPEAT_COUNT` bigint NOT NULL,
+ `REPEAT_INTERVAL` bigint NOT NULL,
+ `TIMES_TRIGGERED` bigint NOT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
+ CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_simple_triggers
+-- ----------------------------
+INSERT INTO `qrtz_simple_triggers` VALUES ('sapling_scheduler', '6da64b5bd2ee-37ffa82a-a598-485c-9718-40ee90c26bc4', 'DEFAULT', -1, 1800000, 1);
+
+-- ----------------------------
+-- Table structure for qrtz_simprop_triggers
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_simprop_triggers`;
+CREATE TABLE `qrtz_simprop_triggers` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `STR_PROP_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `STR_PROP_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `STR_PROP_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `INT_PROP_1` int NULL DEFAULT NULL,
+ `INT_PROP_2` int NULL DEFAULT NULL,
+ `LONG_PROP_1` bigint NULL DEFAULT NULL,
+ `LONG_PROP_2` bigint NULL DEFAULT NULL,
+ `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL,
+ `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL,
+ `BOOL_PROP_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `BOOL_PROP_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
+ CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_simprop_triggers
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for qrtz_triggers
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_triggers`;
+CREATE TABLE `qrtz_triggers` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `NEXT_FIRE_TIME` bigint NULL DEFAULT NULL,
+ `PREV_FIRE_TIME` bigint NULL DEFAULT NULL,
+ `PRIORITY` int NULL DEFAULT NULL,
+ `TRIGGER_STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_TYPE` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `START_TIME` bigint NOT NULL,
+ `END_TIME` bigint NULL DEFAULT NULL,
+ `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `MISFIRE_INSTR` smallint NULL DEFAULT NULL,
+ `JOB_DATA` blob NULL,
+ PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
+ INDEX `IDX_QRTZ_T_J`(`SCHED_NAME` ASC, `JOB_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_JG`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_C`(`SCHED_NAME` ASC, `CALENDAR_NAME` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_G`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_STATE`(`SCHED_NAME` ASC, `TRIGGER_STATE` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_N_STATE`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_N_G_STATE`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_NEXT_FIRE_TIME`(`SCHED_NAME` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_NFT_ST`(`SCHED_NAME` ASC, `TRIGGER_STATE` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_NFT_MISFIRE`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC, `TRIGGER_STATE` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE,
+ CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_triggers
+-- ----------------------------
+INSERT INTO `qrtz_triggers` VALUES ('sapling_scheduler', '6da64b5bd2ee-37ffa82a-a598-485c-9718-40ee90c26bc4', 'DEFAULT', 'peers_cleanup', 'DEFAULT', NULL, 1749020288505, 1749018488505, 5, 'WAITING', 'SIMPLE', 1749018488505, 0, NULL, 0, '');
+
+-- ----------------------------
+-- Table structure for seedbox
+-- ----------------------------
+DROP TABLE IF EXISTS `seedbox`;
+CREATE TABLE `seedbox` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `download_multiplier_id` bigint NULL DEFAULT NULL,
+ `upload_multiplier_id` bigint NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `UKecbehjtg3bfr4rmyixt1gcvfq`(`address` ASC) USING BTREE,
+ INDEX `FKq63tqhykgl96l4rkwy9widy5b`(`download_multiplier_id` ASC) USING BTREE,
+ INDEX `FK9xl51na3dn8k7ou8cyv7s1wrf`(`upload_multiplier_id` ASC) USING BTREE,
+ CONSTRAINT `FK9xl51na3dn8k7ou8cyv7s1wrf` FOREIGN KEY (`upload_multiplier_id`) REFERENCES `promotion_policies` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ CONSTRAINT `FKq63tqhykgl96l4rkwy9widy5b` FOREIGN KEY (`download_multiplier_id`) REFERENCES `promotion_policies` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of seedbox
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for settings
+-- ----------------------------
+DROP TABLE IF EXISTS `settings`;
+CREATE TABLE `settings` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `setting_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `setting_value` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_settings_setting_key`(`setting_key` ASC) USING BTREE,
+ UNIQUE INDEX `UKswd05dvj4ukvw5q135bpbbfae`(`setting_key` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for tags
+-- ----------------------------
+DROP TABLE IF EXISTS `tags`;
+CREATE TABLE `tags` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_tags_name`(`name` ASC) USING BTREE,
+ UNIQUE INDEX `UKt48xdq560gs3gap9g7jg36kgc`(`name` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of tags
+-- ----------------------------
+INSERT INTO `tags` VALUES (9, '[\"linux\"]');
+INSERT INTO `tags` VALUES (3, 'debian');
+INSERT INTO `tags` VALUES (1, 'linux');
+INSERT INTO `tags` VALUES (5, 'macos');
+INSERT INTO `tags` VALUES (2, 'ubuntu');
+INSERT INTO `tags` VALUES (4, 'windows');
+
+-- ----------------------------
+-- Table structure for thanks
+-- ----------------------------
+DROP TABLE IF EXISTS `thanks`;
+CREATE TABLE `thanks` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `torrent_id` bigint NULL DEFAULT NULL,
+ `user_id` bigint NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `UKrt9lg0h53brgpf9iat5hcmf6g`(`user_id` ASC, `torrent_id` ASC) USING BTREE,
+ INDEX `FKp3kgh25tko48vq7x6u2w3dvpp`(`torrent_id` ASC) USING BTREE,
+ CONSTRAINT `FK2t90h21s5hyx6hynewsdlk46j` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ CONSTRAINT `FKp3kgh25tko48vq7x6u2w3dvpp` FOREIGN KEY (`torrent_id`) REFERENCES `torrents` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of thanks
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for torrents
+-- ----------------------------
+DROP TABLE IF EXISTS `torrents`;
+CREATE TABLE `torrents` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `info_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `user_id` bigint NULL DEFAULT NULL,
+ `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `sub_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `size` bigint NOT NULL,
+ `created_at` timestamp NOT NULL,
+ `updated_at` timestamp NOT NULL,
+ `under_review` tinyint(1) NOT NULL,
+ `anonymous` tinyint(1) NOT NULL,
+ `category_id` bigint NULL DEFAULT NULL,
+ `promotion_policy_id` bigint NULL DEFAULT NULL,
+ `description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_torrents_info_hash`(`info_hash` ASC) USING BTREE,
+ UNIQUE INDEX `UKhag2ej1vo8snvirb1lv4b8r4x`(`info_hash` ASC) USING BTREE,
+ INDEX `idx_torrents_title`(`title` ASC) USING BTREE,
+ INDEX `idx_torrents_sub_title`(`sub_title` ASC) USING BTREE,
+ INDEX `idx_torrents_promotion_policy_id`(`promotion_policy_id` ASC) USING BTREE,
+ INDEX `fk_torrents_user`(`user_id` ASC) USING BTREE,
+ INDEX `fk_torrents_category`(`category_id` ASC) USING BTREE,
+ INDEX `IDXdplkaapqslelnscuunfpm9eb6`(`title` ASC) USING BTREE,
+ INDEX `IDX6r5kh6i4awpdlytjmm06pk22k`(`sub_title` ASC) USING BTREE,
+ INDEX `IDXd2j3h8td7682cctkv5o77b33y`(`promotion_policy_id` ASC) USING BTREE,
+ CONSTRAINT `fk_torrents_category` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT,
+ CONSTRAINT `fk_torrents_promotion_policy` FOREIGN KEY (`promotion_policy_id`) REFERENCES `promotion_policies` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT,
+ CONSTRAINT `fk_torrents_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of torrents
+-- ----------------------------
+INSERT INTO `torrents` VALUES (7, '499e9c69e90b976c5c84542cf9b88fad1e12ef1c', 1, 'example torrent title', 'subtitle here', 66194, '2025-06-04 03:41:27', '2025-06-04 03:41:27', 0, 0, 1, 1, '演示种子');
+INSERT INTO `torrents` VALUES (8, 'f45775564c88b5a2782a301d162e1d4811b0b6d5', 1, 'example torrent title', 'subtitle here', 231105, '2025-06-04 05:20:37', '2025-06-04 05:20:37', 0, 0, 1, 1, '演示种子');
+INSERT INTO `torrents` VALUES (9, '8e10c9daa1b5fb18dc5b0e73988808ba958391fa', 1, 'example torrent title', 'subtitle here', 426155, '2025-06-04 06:03:49', '2025-06-04 06:03:49', 0, 0, 1, 1, '演示种子');
+INSERT INTO `torrents` VALUES (10, '1e3275f54ec074af2d99828311d4a8488eb7a487', 1, 'example torrent title', 'subtitle here', 13861694, '2025-06-04 06:10:23', '2025-06-04 06:10:23', 0, 0, 1, 1, '演示种子');
+
+-- ----------------------------
+-- Table structure for torrents_tag
+-- ----------------------------
+DROP TABLE IF EXISTS `torrents_tag`;
+CREATE TABLE `torrents_tag` (
+ `torrent_id` bigint NOT NULL,
+ `tag_id` bigint NOT NULL,
+ PRIMARY KEY (`torrent_id`, `tag_id`) USING BTREE,
+ INDEX `fk_torrents_tag_tag`(`tag_id` ASC) USING BTREE,
+ CONSTRAINT `fk_torrents_tag_tag` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT,
+ CONSTRAINT `fk_torrents_tag_torrent` FOREIGN KEY (`torrent_id`) REFERENCES `torrents` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of torrents_tag
+-- ----------------------------
+INSERT INTO `torrents_tag` VALUES (7, 9);
+INSERT INTO `torrents_tag` VALUES (8, 9);
+INSERT INTO `torrents_tag` VALUES (9, 9);
+INSERT INTO `torrents_tag` VALUES (10, 9);
+
+-- ----------------------------
+-- Table structure for transfer_history
+-- ----------------------------
+DROP TABLE IF EXISTS `transfer_history`;
+CREATE TABLE `transfer_history` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `user_id` bigint NOT NULL,
+ `torrent_id` bigint NOT NULL,
+ `to_go` bigint NOT NULL,
+ `started_at` timestamp NOT NULL,
+ `updated_at` timestamp NOT NULL,
+ `uploaded` bigint NOT NULL,
+ `downloaded` bigint NOT NULL,
+ `actual_uploaded` bigint NOT NULL,
+ `actual_downloaded` bigint NOT NULL,
+ `upload_speed` bigint NOT NULL,
+ `download_speed` bigint NOT NULL,
+ `last_event` enum('started','completed','stopped','paused','unknown') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `have_complete_history` tinyint(1) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_user_torrent`(`user_id` ASC, `torrent_id` ASC) USING BTREE,
+ UNIQUE INDEX `UKrm5p4xv3rb2vm6psql5je94jh`(`user_id` ASC, `torrent_id` ASC) USING BTREE,
+ INDEX `fk_transfer_torrent`(`torrent_id` ASC) USING BTREE,
+ CONSTRAINT `fk_transfer_torrent` FOREIGN KEY (`torrent_id`) REFERENCES `torrents` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ CONSTRAINT `fk_transfer_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of transfer_history
+-- ----------------------------
+INSERT INTO `transfer_history` VALUES (1, 1, 7, 66194, '2025-06-04 04:43:30', '2025-06-04 05:21:25', 0, 0, 0, 0, 0, 0, 'completed', 1);
+INSERT INTO `transfer_history` VALUES (2, 1, 10, 0, '2025-06-04 06:11:31', '2025-06-04 06:13:21', 27723388, 0, 0, 27723388, 0, 77874, 'started', 1);
+
+-- ----------------------------
+-- Table structure for user_groups
+-- ----------------------------
+DROP TABLE IF EXISTS `user_groups`;
+CREATE TABLE `user_groups` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `promotion_policy_id` bigint NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_user_groups_slug`(`slug` ASC) USING BTREE,
+ UNIQUE INDEX `UKkkje1jbmrkam1k7jbd39homw0`(`slug` ASC) USING BTREE,
+ INDEX `fk_user_groups_promotion_policy`(`promotion_policy_id` ASC) USING BTREE,
+ CONSTRAINT `fk_user_groups_promotion_policy` FOREIGN KEY (`promotion_policy_id`) REFERENCES `promotion_policies` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of user_groups
+-- ----------------------------
+INSERT INTO `user_groups` VALUES (1, 'default', '默认用户组', 1);
+INSERT INTO `user_groups` VALUES (2, 'vip', '活跃用户组', 2);
+
+-- ----------------------------
+-- Table structure for user_groups_permission_entities
+-- ----------------------------
+DROP TABLE IF EXISTS `user_groups_permission_entities`;
+CREATE TABLE `user_groups_permission_entities` (
+ `user_group_id` bigint NOT NULL,
+ `permission_entities_id` bigint NOT NULL,
+ PRIMARY KEY (`user_group_id`, `permission_entities_id`) USING BTREE,
+ UNIQUE INDEX `UK_95j9uaq96bvd9ykn0sngywks6`(`permission_entities_id` ASC) USING BTREE,
+ CONSTRAINT `fk_ugpe_permission` FOREIGN KEY (`permission_entities_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT,
+ CONSTRAINT `fk_ugpe_user_group` FOREIGN KEY (`user_group_id`) REFERENCES `user_groups` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of user_groups_permission_entities
+-- ----------------------------
+INSERT INTO `user_groups_permission_entities` VALUES (1, 1);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 2);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 3);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 4);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 5);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 6);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 7);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 8);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 9);
+
+-- ----------------------------
+-- Table structure for users
+-- ----------------------------
+DROP TABLE IF EXISTS `users`;
+CREATE TABLE `users` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `group_id` bigint NULL DEFAULT NULL,
+ `passkey` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `create_at` timestamp NOT NULL,
+ `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `custom_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `signature` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `language` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `download_bandwidth` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `upload_bandwidth` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `downloaded` bigint NOT NULL,
+ `uploaded` bigint NOT NULL,
+ `real_downloaded` bigint NOT NULL,
+ `real_uploaded` bigint NOT NULL,
+ `isp` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `karma` decimal(19, 2) NOT NULL,
+ `invite_slot` int NOT NULL,
+ `seeding_time` bigint NOT NULL,
+ `personal_access_token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `privacy_level` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_users_username`(`username` ASC) USING BTREE,
+ UNIQUE INDEX `uk_users_email`(`email` ASC) USING BTREE,
+ UNIQUE INDEX `uk_users_passkey`(`passkey` ASC) USING BTREE,
+ UNIQUE INDEX `UKr43af9ap4edm43mmtq01oddj6`(`username` ASC) USING BTREE,
+ UNIQUE INDEX `UK6dotkott2kjsp8vw4d0m25fb7`(`email` ASC) USING BTREE,
+ UNIQUE INDEX `UK402sx6cqgk66uwt7eyf54tmij`(`passkey` ASC) USING BTREE,
+ INDEX `fk_users_group`(`group_id` ASC) USING BTREE,
+ CONSTRAINT `fk_users_group` FOREIGN KEY (`group_id`) REFERENCES `user_groups` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- 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');
+
+SET FOREIGN_KEY_CHECKS = 1;
diff --git a/target/classes/ppt.sql b/target/classes/ppt.sql
index 1181c77..c4b8c5c 100644
--- a/target/classes/ppt.sql
+++ b/target/classes/ppt.sql
@@ -1,729 +1,729 @@
-/*
- Navicat Premium Dump SQL
-
- Source Server : first
- Source Server Type : MySQL
- Source Server Version : 80036 (8.0.36)
- Source Host : localhost:3306
- Source Schema : ppt
-
- Target Server Type : MySQL
- Target Server Version : 80036 (8.0.36)
- File Encoding : 65001
-
- Date: 04/06/2025 14:33:40
-*/
-
-SET NAMES utf8mb4;
-SET FOREIGN_KEY_CHECKS = 0;
-
--- ----------------------------
--- Table structure for categories
--- ----------------------------
-DROP TABLE IF EXISTS `categories`;
-CREATE TABLE `categories` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_categories_slug`(`slug` ASC) USING BTREE,
- UNIQUE INDEX `UKoul14ho7bctbefv8jywp5v3i2`(`slug` ASC) USING BTREE,
- INDEX `idx_categories_slug`(`slug` ASC) USING BTREE,
- INDEX `IDXoul14ho7bctbefv8jywp5v3i2`(`slug` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of categories
--- ----------------------------
-INSERT INTO `categories` VALUES (1, 'os', '操作系统', 'os-icon.png');
-
--- ----------------------------
--- Table structure for exam_plans
--- ----------------------------
-DROP TABLE IF EXISTS `exam_plans`;
-CREATE TABLE `exam_plans` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `downloaded` bigint NOT NULL,
- `duration` bigint NOT NULL,
- `karma` double NOT NULL,
- `seeding_time` bigint NOT NULL,
- `seeds` bigint NOT NULL,
- `share_ratio` double NOT NULL,
- `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `uploaded` bigint NOT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `UK74jaepieaj2umswpqn16yy3x5`(`slug` ASC) USING BTREE,
- INDEX `IDX74jaepieaj2umswpqn16yy3x5`(`slug` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of exam_plans
--- ----------------------------
-
--- ----------------------------
--- Table structure for exams
--- ----------------------------
-DROP TABLE IF EXISTS `exams`;
-CREATE TABLE `exams` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `end_at` datetime(6) NOT NULL,
- `exam_plan_id` bigint NULL DEFAULT NULL,
- `user_id` bigint NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `UK2wii0igd3vdfecy00op0un4qt`(`user_id` ASC) USING BTREE,
- INDEX `IDX2wii0igd3vdfecy00op0un4qt`(`user_id` ASC) USING BTREE,
- INDEX `FKl0cips1gany3cuppyfs7ntpai`(`exam_plan_id` ASC) USING BTREE,
- CONSTRAINT `FKi63cpl1xkgy32iq68ru4ypjn4` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
- CONSTRAINT `FKl0cips1gany3cuppyfs7ntpai` FOREIGN KEY (`exam_plan_id`) REFERENCES `exam_plans` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of exams
--- ----------------------------
-
--- ----------------------------
--- Table structure for login_history
--- ----------------------------
-DROP TABLE IF EXISTS `login_history`;
-CREATE TABLE `login_history` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `user_id` bigint NOT NULL,
- `time` timestamp NOT NULL,
- `type` enum('ACCOUNT','PASSKEY','PERSONAL_ACCESSTOKEN','PROGRAM_INTERNAL','TWO_STEP_VERIFICATION') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `ip_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `user_agent` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- INDEX `idx_login_time`(`time` ASC) USING BTREE,
- INDEX `fk_loginhistory_user`(`user_id` ASC) USING BTREE,
- INDEX `IDX3lft44makrxommxm63k7xj77d`(`time` ASC) USING BTREE,
- CONSTRAINT `fk_loginhistory_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 33 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of login_history
--- ----------------------------
-INSERT INTO `login_history` VALUES (1, 1, '2025-06-03 12:25:33', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (2, 1, '2025-06-03 12:51:42', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (3, 1, '2025-06-03 12:52:55', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (4, 1, '2025-06-03 14:20:55', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (5, 1, '2025-06-03 14:31:13', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (6, 1, '2025-06-04 03:40:10', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.44.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (7, 1, '2025-06-04 03:43:09', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (8, 1, '2025-06-04 03:44:27', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (9, 1, '2025-06-04 03:51:35', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (10, 1, '2025-06-04 03:52:22', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (11, 1, '2025-06-04 03:52:53', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (12, 1, '2025-06-04 03:53:12', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (13, 1, '2025-06-04 03:54:46', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (14, 1, '2025-06-04 03:58:14', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (15, 1, '2025-06-04 04:22:30', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (16, 1, '2025-06-04 04:43:29', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (17, 1, '2025-06-04 04:54:09', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (18, 1, '2025-06-04 04:59:13', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (19, 1, '2025-06-04 05:17:07', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (20, 1, '2025-06-04 05:18:28', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (21, 1, '2025-06-04 05:21:25', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (22, 1, '2025-06-04 05:21:58', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (23, 1, '2025-06-04 05:22:24', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (24, 1, '2025-06-04 05:22:30', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (25, 1, '2025-06-04 05:27:44', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (26, 1, '2025-06-04 05:27:50', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (27, 1, '2025-06-04 05:31:45', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (28, 1, '2025-06-04 05:33:00', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (29, 1, '2025-06-04 06:11:31', 'PASSKEY', '192.168.254.1', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (30, 1, '2025-06-04 06:12:13', 'PASSKEY', '192.168.254.1', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (31, 1, '2025-06-04 06:12:27', 'PASSKEY', '192.168.254.1', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-INSERT INTO `login_history` VALUES (32, 1, '2025-06-04 06:13:21', 'PASSKEY', '192.168.254.1', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
-
--- ----------------------------
--- Table structure for peers
--- ----------------------------
-DROP TABLE IF EXISTS `peers`;
-CREATE TABLE `peers` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `port` int NOT NULL,
- `info_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `peer_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `user_agent` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `uploaded` bigint NOT NULL,
- `downloaded` bigint NOT NULL,
- `to_go` bigint NOT NULL,
- `seeder` tinyint(1) NOT NULL,
- `partial_seeder` tinyint(1) NOT NULL,
- `passkey` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `update_at` timestamp NOT NULL,
- `seeding_time` bigint NOT NULL,
- `upload_speed` bigint NOT NULL,
- `download_speed` bigint NOT NULL,
- `user_id` bigint NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_peers_ip_port_infohash`(`ip` ASC, `port` ASC, `info_hash` ASC) USING BTREE,
- UNIQUE INDEX `UKoa8l3xqdvxr898mosks3hq3cb`(`ip` ASC, `port` ASC, `info_hash` ASC) USING BTREE,
- INDEX `idx_peers_update_at`(`update_at` ASC) USING BTREE,
- INDEX `fk_peers_user`(`user_id` ASC) USING BTREE,
- INDEX `IDXmmvk33liy7j5u9e4qhxw2d7h5`(`update_at` ASC) USING BTREE,
- CONSTRAINT `fk_peers_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for permissions
--- ----------------------------
-DROP TABLE IF EXISTS `permissions`;
-CREATE TABLE `permissions` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `def` tinyint(1) NOT NULL,
- `user_group_id` bigint NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_permissions_slug`(`slug` ASC) USING BTREE,
- UNIQUE INDEX `UKdv6mwikptsu70hcrjq07sqsfy`(`slug` ASC) USING BTREE,
- INDEX `fk_permissions_user_group`(`user_group_id` ASC) USING BTREE,
- CONSTRAINT `fk_permissions_user_group` FOREIGN KEY (`user_group_id`) REFERENCES `user_groups` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of permissions
--- ----------------------------
-INSERT INTO `permissions` VALUES (1, 'torrent:upload', 1, 1);
-INSERT INTO `permissions` VALUES (2, 'torrent:download', 1, 1);
-INSERT INTO `permissions` VALUES (3, 'torrent:view', 1, 1);
-INSERT INTO `permissions` VALUES (4, 'torrent:search', 1, 1);
-INSERT INTO `permissions` VALUES (5, 'comment:create', 1, 1);
-INSERT INTO `permissions` VALUES (6, 'user:manage', 1, 1);
-INSERT INTO `permissions` VALUES (7, 'torrent:approve', 1, 1);
-INSERT INTO `permissions` VALUES (8, 'torrent:thanks', 1, 1);
-INSERT INTO `permissions` VALUES (9, 'promotion:list', 1, 1);
-
--- ----------------------------
--- Table structure for promotion_policies
--- ----------------------------
-DROP TABLE IF EXISTS `promotion_policies`;
-CREATE TABLE `promotion_policies` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `upload_ratio` double NULL DEFAULT NULL,
- `download_ratio` double NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_promotion_policies_slug`(`slug` ASC) USING BTREE,
- UNIQUE INDEX `UKcjqpe1g15outfc0u6ajvpwxoe`(`slug` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of promotion_policies
--- ----------------------------
-INSERT INTO `promotion_policies` VALUES (1, 'default', '默认策略', 1, 1);
-INSERT INTO `promotion_policies` VALUES (2, 'vip', '活跃用户策略', 1, 1.5);
-
--- ----------------------------
--- Table structure for qrtz_blob_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_blob_triggers`;
-CREATE TABLE `qrtz_blob_triggers` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `BLOB_DATA` blob NULL,
- PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
- INDEX `SCHED_NAME`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE,
- CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_blob_triggers
--- ----------------------------
-
--- ----------------------------
--- Table structure for qrtz_calendars
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_calendars`;
-CREATE TABLE `qrtz_calendars` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `CALENDAR` blob NOT NULL,
- PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_calendars
--- ----------------------------
-
--- ----------------------------
--- Table structure for qrtz_cron_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_cron_triggers`;
-CREATE TABLE `qrtz_cron_triggers` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `CRON_EXPRESSION` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TIME_ZONE_ID` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
- CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_cron_triggers
--- ----------------------------
-
--- ----------------------------
--- Table structure for qrtz_fired_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_fired_triggers`;
-CREATE TABLE `qrtz_fired_triggers` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `ENTRY_ID` varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `FIRED_TIME` bigint NOT NULL,
- `SCHED_TIME` bigint NOT NULL,
- `PRIORITY` int NOT NULL,
- `STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`) USING BTREE,
- INDEX `IDX_QRTZ_FT_TRIG_INST_NAME`(`SCHED_NAME` ASC, `INSTANCE_NAME` ASC) USING BTREE,
- INDEX `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY`(`SCHED_NAME` ASC, `INSTANCE_NAME` ASC, `REQUESTS_RECOVERY` ASC) USING BTREE,
- INDEX `IDX_QRTZ_FT_J_G`(`SCHED_NAME` ASC, `JOB_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
- INDEX `IDX_QRTZ_FT_JG`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
- INDEX `IDX_QRTZ_FT_T_G`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE,
- INDEX `IDX_QRTZ_FT_TG`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_fired_triggers
--- ----------------------------
-
--- ----------------------------
--- Table structure for qrtz_job_details
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_job_details`;
-CREATE TABLE `qrtz_job_details` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `IS_DURABLE` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `JOB_DATA` blob NULL,
- PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE,
- INDEX `IDX_QRTZ_J_REQ_RECOVERY`(`SCHED_NAME` ASC, `REQUESTS_RECOVERY` ASC) USING BTREE,
- INDEX `IDX_QRTZ_J_GRP`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_job_details
--- ----------------------------
-INSERT INTO `qrtz_job_details` VALUES ('sapling_scheduler', 'peers_cleanup', 'DEFAULT', 'Peers Cleanup', 'com.github.example.pt.crontask.PeersCleanup', '1', '0', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787000737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F40000000000010770800000010000000007800);
-
--- ----------------------------
--- Table structure for qrtz_locks
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_locks`;
-CREATE TABLE `qrtz_locks` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `LOCK_NAME` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- PRIMARY KEY (`SCHED_NAME`, `LOCK_NAME`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_locks
--- ----------------------------
-INSERT INTO `qrtz_locks` VALUES ('sapling_scheduler', 'STATE_ACCESS');
-INSERT INTO `qrtz_locks` VALUES ('sapling_scheduler', 'TRIGGER_ACCESS');
-
--- ----------------------------
--- Table structure for qrtz_paused_trigger_grps
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`;
-CREATE TABLE `qrtz_paused_trigger_grps` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_paused_trigger_grps
--- ----------------------------
-
--- ----------------------------
--- Table structure for qrtz_scheduler_state
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_scheduler_state`;
-CREATE TABLE `qrtz_scheduler_state` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `LAST_CHECKIN_TIME` bigint NOT NULL,
- `CHECKIN_INTERVAL` bigint NOT NULL,
- PRIMARY KEY (`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_scheduler_state
--- ----------------------------
-INSERT INTO `qrtz_scheduler_state` VALUES ('sapling_scheduler', 'LAPTOP-V24K5A551749018489588', 1749018510182, 10000);
-
--- ----------------------------
--- Table structure for qrtz_simple_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_simple_triggers`;
-CREATE TABLE `qrtz_simple_triggers` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `REPEAT_COUNT` bigint NOT NULL,
- `REPEAT_INTERVAL` bigint NOT NULL,
- `TIMES_TRIGGERED` bigint NOT NULL,
- PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
- CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_simple_triggers
--- ----------------------------
-INSERT INTO `qrtz_simple_triggers` VALUES ('sapling_scheduler', '6da64b5bd2ee-37ffa82a-a598-485c-9718-40ee90c26bc4', 'DEFAULT', -1, 1800000, 1);
-
--- ----------------------------
--- Table structure for qrtz_simprop_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_simprop_triggers`;
-CREATE TABLE `qrtz_simprop_triggers` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `STR_PROP_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `STR_PROP_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `STR_PROP_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `INT_PROP_1` int NULL DEFAULT NULL,
- `INT_PROP_2` int NULL DEFAULT NULL,
- `LONG_PROP_1` bigint NULL DEFAULT NULL,
- `LONG_PROP_2` bigint NULL DEFAULT NULL,
- `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL,
- `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL,
- `BOOL_PROP_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `BOOL_PROP_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
- CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_simprop_triggers
--- ----------------------------
-
--- ----------------------------
--- Table structure for qrtz_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_triggers`;
-CREATE TABLE `qrtz_triggers` (
- `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `NEXT_FIRE_TIME` bigint NULL DEFAULT NULL,
- `PREV_FIRE_TIME` bigint NULL DEFAULT NULL,
- `PRIORITY` int NULL DEFAULT NULL,
- `TRIGGER_STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `TRIGGER_TYPE` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `START_TIME` bigint NOT NULL,
- `END_TIME` bigint NULL DEFAULT NULL,
- `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
- `MISFIRE_INSTR` smallint NULL DEFAULT NULL,
- `JOB_DATA` blob NULL,
- PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
- INDEX `IDX_QRTZ_T_J`(`SCHED_NAME` ASC, `JOB_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_JG`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_C`(`SCHED_NAME` ASC, `CALENDAR_NAME` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_G`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_STATE`(`SCHED_NAME` ASC, `TRIGGER_STATE` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_N_STATE`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_N_G_STATE`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_NEXT_FIRE_TIME`(`SCHED_NAME` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_NFT_ST`(`SCHED_NAME` ASC, `TRIGGER_STATE` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_NFT_MISFIRE`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC, `TRIGGER_STATE` ASC) USING BTREE,
- INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE,
- CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of qrtz_triggers
--- ----------------------------
-INSERT INTO `qrtz_triggers` VALUES ('sapling_scheduler', '6da64b5bd2ee-37ffa82a-a598-485c-9718-40ee90c26bc4', 'DEFAULT', 'peers_cleanup', 'DEFAULT', NULL, 1749020288505, 1749018488505, 5, 'WAITING', 'SIMPLE', 1749018488505, 0, NULL, 0, '');
-
--- ----------------------------
--- Table structure for seedbox
--- ----------------------------
-DROP TABLE IF EXISTS `seedbox`;
-CREATE TABLE `seedbox` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `download_multiplier_id` bigint NULL DEFAULT NULL,
- `upload_multiplier_id` bigint NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `UKecbehjtg3bfr4rmyixt1gcvfq`(`address` ASC) USING BTREE,
- INDEX `FKq63tqhykgl96l4rkwy9widy5b`(`download_multiplier_id` ASC) USING BTREE,
- INDEX `FK9xl51na3dn8k7ou8cyv7s1wrf`(`upload_multiplier_id` ASC) USING BTREE,
- CONSTRAINT `FK9xl51na3dn8k7ou8cyv7s1wrf` FOREIGN KEY (`upload_multiplier_id`) REFERENCES `promotion_policies` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
- CONSTRAINT `FKq63tqhykgl96l4rkwy9widy5b` FOREIGN KEY (`download_multiplier_id`) REFERENCES `promotion_policies` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of seedbox
--- ----------------------------
-
--- ----------------------------
--- Table structure for settings
--- ----------------------------
-DROP TABLE IF EXISTS `settings`;
-CREATE TABLE `settings` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `setting_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `setting_value` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_settings_setting_key`(`setting_key` ASC) USING BTREE,
- UNIQUE INDEX `UKswd05dvj4ukvw5q135bpbbfae`(`setting_key` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Table structure for tags
--- ----------------------------
-DROP TABLE IF EXISTS `tags`;
-CREATE TABLE `tags` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_tags_name`(`name` ASC) USING BTREE,
- UNIQUE INDEX `UKt48xdq560gs3gap9g7jg36kgc`(`name` ASC) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of tags
--- ----------------------------
-INSERT INTO `tags` VALUES (9, '[\"linux\"]');
-INSERT INTO `tags` VALUES (3, 'debian');
-INSERT INTO `tags` VALUES (1, 'linux');
-INSERT INTO `tags` VALUES (5, 'macos');
-INSERT INTO `tags` VALUES (2, 'ubuntu');
-INSERT INTO `tags` VALUES (4, 'windows');
-
--- ----------------------------
--- Table structure for thanks
--- ----------------------------
-DROP TABLE IF EXISTS `thanks`;
-CREATE TABLE `thanks` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `torrent_id` bigint NULL DEFAULT NULL,
- `user_id` bigint NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `UKrt9lg0h53brgpf9iat5hcmf6g`(`user_id` ASC, `torrent_id` ASC) USING BTREE,
- INDEX `FKp3kgh25tko48vq7x6u2w3dvpp`(`torrent_id` ASC) USING BTREE,
- CONSTRAINT `FK2t90h21s5hyx6hynewsdlk46j` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
- CONSTRAINT `FKp3kgh25tko48vq7x6u2w3dvpp` FOREIGN KEY (`torrent_id`) REFERENCES `torrents` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of thanks
--- ----------------------------
-
--- ----------------------------
--- Table structure for torrents
--- ----------------------------
-DROP TABLE IF EXISTS `torrents`;
-CREATE TABLE `torrents` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `info_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `user_id` bigint NULL DEFAULT NULL,
- `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `sub_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `size` bigint NOT NULL,
- `created_at` timestamp NOT NULL,
- `updated_at` timestamp NOT NULL,
- `under_review` tinyint(1) NOT NULL,
- `anonymous` tinyint(1) NOT NULL,
- `category_id` bigint NULL DEFAULT NULL,
- `promotion_policy_id` bigint NULL DEFAULT NULL,
- `description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_torrents_info_hash`(`info_hash` ASC) USING BTREE,
- UNIQUE INDEX `UKhag2ej1vo8snvirb1lv4b8r4x`(`info_hash` ASC) USING BTREE,
- INDEX `idx_torrents_title`(`title` ASC) USING BTREE,
- INDEX `idx_torrents_sub_title`(`sub_title` ASC) USING BTREE,
- INDEX `idx_torrents_promotion_policy_id`(`promotion_policy_id` ASC) USING BTREE,
- INDEX `fk_torrents_user`(`user_id` ASC) USING BTREE,
- INDEX `fk_torrents_category`(`category_id` ASC) USING BTREE,
- INDEX `IDXdplkaapqslelnscuunfpm9eb6`(`title` ASC) USING BTREE,
- INDEX `IDX6r5kh6i4awpdlytjmm06pk22k`(`sub_title` ASC) USING BTREE,
- INDEX `IDXd2j3h8td7682cctkv5o77b33y`(`promotion_policy_id` ASC) USING BTREE,
- CONSTRAINT `fk_torrents_category` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT,
- CONSTRAINT `fk_torrents_promotion_policy` FOREIGN KEY (`promotion_policy_id`) REFERENCES `promotion_policies` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT,
- CONSTRAINT `fk_torrents_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of torrents
--- ----------------------------
-INSERT INTO `torrents` VALUES (7, '499e9c69e90b976c5c84542cf9b88fad1e12ef1c', 1, 'example torrent title', 'subtitle here', 66194, '2025-06-04 03:41:27', '2025-06-04 03:41:27', 0, 0, 1, 1, '演示种子');
-INSERT INTO `torrents` VALUES (8, 'f45775564c88b5a2782a301d162e1d4811b0b6d5', 1, 'example torrent title', 'subtitle here', 231105, '2025-06-04 05:20:37', '2025-06-04 05:20:37', 0, 0, 1, 1, '演示种子');
-INSERT INTO `torrents` VALUES (9, '8e10c9daa1b5fb18dc5b0e73988808ba958391fa', 1, 'example torrent title', 'subtitle here', 426155, '2025-06-04 06:03:49', '2025-06-04 06:03:49', 0, 0, 1, 1, '演示种子');
-INSERT INTO `torrents` VALUES (10, '1e3275f54ec074af2d99828311d4a8488eb7a487', 1, 'example torrent title', 'subtitle here', 13861694, '2025-06-04 06:10:23', '2025-06-04 06:10:23', 0, 0, 1, 1, '演示种子');
-
--- ----------------------------
--- Table structure for torrents_tag
--- ----------------------------
-DROP TABLE IF EXISTS `torrents_tag`;
-CREATE TABLE `torrents_tag` (
- `torrent_id` bigint NOT NULL,
- `tag_id` bigint NOT NULL,
- PRIMARY KEY (`torrent_id`, `tag_id`) USING BTREE,
- INDEX `fk_torrents_tag_tag`(`tag_id` ASC) USING BTREE,
- CONSTRAINT `fk_torrents_tag_tag` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT,
- CONSTRAINT `fk_torrents_tag_torrent` FOREIGN KEY (`torrent_id`) REFERENCES `torrents` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of torrents_tag
--- ----------------------------
-INSERT INTO `torrents_tag` VALUES (7, 9);
-INSERT INTO `torrents_tag` VALUES (8, 9);
-INSERT INTO `torrents_tag` VALUES (9, 9);
-INSERT INTO `torrents_tag` VALUES (10, 9);
-
--- ----------------------------
--- Table structure for transfer_history
--- ----------------------------
-DROP TABLE IF EXISTS `transfer_history`;
-CREATE TABLE `transfer_history` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `user_id` bigint NOT NULL,
- `torrent_id` bigint NOT NULL,
- `to_go` bigint NOT NULL,
- `started_at` timestamp NOT NULL,
- `updated_at` timestamp NOT NULL,
- `uploaded` bigint NOT NULL,
- `downloaded` bigint NOT NULL,
- `actual_uploaded` bigint NOT NULL,
- `actual_downloaded` bigint NOT NULL,
- `upload_speed` bigint NOT NULL,
- `download_speed` bigint NOT NULL,
- `last_event` enum('started','completed','stopped','paused','unknown') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `have_complete_history` tinyint(1) NOT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_user_torrent`(`user_id` ASC, `torrent_id` ASC) USING BTREE,
- UNIQUE INDEX `UKrm5p4xv3rb2vm6psql5je94jh`(`user_id` ASC, `torrent_id` ASC) USING BTREE,
- INDEX `fk_transfer_torrent`(`torrent_id` ASC) USING BTREE,
- CONSTRAINT `fk_transfer_torrent` FOREIGN KEY (`torrent_id`) REFERENCES `torrents` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
- CONSTRAINT `fk_transfer_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of transfer_history
--- ----------------------------
-INSERT INTO `transfer_history` VALUES (1, 1, 7, 66194, '2025-06-04 04:43:30', '2025-06-04 05:21:25', 0, 0, 0, 0, 0, 0, 'completed', 1);
-INSERT INTO `transfer_history` VALUES (2, 1, 10, 0, '2025-06-04 06:11:31', '2025-06-04 06:13:21', 27723388, 0, 0, 27723388, 0, 77874, 'started', 1);
-
--- ----------------------------
--- Table structure for user_groups
--- ----------------------------
-DROP TABLE IF EXISTS `user_groups`;
-CREATE TABLE `user_groups` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `promotion_policy_id` bigint NULL DEFAULT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_user_groups_slug`(`slug` ASC) USING BTREE,
- UNIQUE INDEX `UKkkje1jbmrkam1k7jbd39homw0`(`slug` ASC) USING BTREE,
- INDEX `fk_user_groups_promotion_policy`(`promotion_policy_id` ASC) USING BTREE,
- CONSTRAINT `fk_user_groups_promotion_policy` FOREIGN KEY (`promotion_policy_id`) REFERENCES `promotion_policies` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of user_groups
--- ----------------------------
-INSERT INTO `user_groups` VALUES (1, 'default', '默认用户组', 1);
-INSERT INTO `user_groups` VALUES (2, 'vip', '活跃用户组', 2);
-
--- ----------------------------
--- Table structure for user_groups_permission_entities
--- ----------------------------
-DROP TABLE IF EXISTS `user_groups_permission_entities`;
-CREATE TABLE `user_groups_permission_entities` (
- `user_group_id` bigint NOT NULL,
- `permission_entities_id` bigint NOT NULL,
- PRIMARY KEY (`user_group_id`, `permission_entities_id`) USING BTREE,
- UNIQUE INDEX `UK_95j9uaq96bvd9ykn0sngywks6`(`permission_entities_id` ASC) USING BTREE,
- CONSTRAINT `fk_ugpe_permission` FOREIGN KEY (`permission_entities_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT,
- CONSTRAINT `fk_ugpe_user_group` FOREIGN KEY (`user_group_id`) REFERENCES `user_groups` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of user_groups_permission_entities
--- ----------------------------
-INSERT INTO `user_groups_permission_entities` VALUES (1, 1);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 2);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 3);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 4);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 5);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 6);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 7);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 8);
-INSERT INTO `user_groups_permission_entities` VALUES (1, 9);
-
--- ----------------------------
--- Table structure for users
--- ----------------------------
-DROP TABLE IF EXISTS `users`;
-CREATE TABLE `users` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `group_id` bigint NULL DEFAULT NULL,
- `passkey` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `create_at` timestamp NOT NULL,
- `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `custom_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `signature` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `language` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `download_bandwidth` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `upload_bandwidth` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `downloaded` bigint NOT NULL,
- `uploaded` bigint NOT NULL,
- `real_downloaded` bigint NOT NULL,
- `real_uploaded` bigint NOT NULL,
- `isp` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `karma` decimal(19, 2) NOT NULL,
- `invite_slot` int NOT NULL,
- `seeding_time` bigint NOT NULL,
- `personal_access_token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- `privacy_level` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_users_username`(`username` ASC) USING BTREE,
- UNIQUE INDEX `uk_users_email`(`email` ASC) USING BTREE,
- UNIQUE INDEX `uk_users_passkey`(`passkey` ASC) USING BTREE,
- UNIQUE INDEX `UKr43af9ap4edm43mmtq01oddj6`(`username` ASC) USING BTREE,
- UNIQUE INDEX `UK6dotkott2kjsp8vw4d0m25fb7`(`email` ASC) USING BTREE,
- UNIQUE INDEX `UK402sx6cqgk66uwt7eyf54tmij`(`passkey` ASC) USING BTREE,
- INDEX `fk_users_group`(`group_id` ASC) USING BTREE,
- CONSTRAINT `fk_users_group` FOREIGN KEY (`group_id`) REFERENCES `user_groups` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- 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');
-
-SET FOREIGN_KEY_CHECKS = 1;
+/*
+ Navicat Premium Dump SQL
+
+ Source Server : first
+ Source Server Type : MySQL
+ Source Server Version : 80036 (8.0.36)
+ Source Host : localhost:3306
+ Source Schema : ppt
+
+ Target Server Type : MySQL
+ Target Server Version : 80036 (8.0.36)
+ File Encoding : 65001
+
+ Date: 04/06/2025 14:33:40
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for categories
+-- ----------------------------
+DROP TABLE IF EXISTS `categories`;
+CREATE TABLE `categories` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_categories_slug`(`slug` ASC) USING BTREE,
+ UNIQUE INDEX `UKoul14ho7bctbefv8jywp5v3i2`(`slug` ASC) USING BTREE,
+ INDEX `idx_categories_slug`(`slug` ASC) USING BTREE,
+ INDEX `IDXoul14ho7bctbefv8jywp5v3i2`(`slug` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of categories
+-- ----------------------------
+INSERT INTO `categories` VALUES (1, 'os', '操作系统', 'os-icon.png');
+
+-- ----------------------------
+-- Table structure for exam_plans
+-- ----------------------------
+DROP TABLE IF EXISTS `exam_plans`;
+CREATE TABLE `exam_plans` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `downloaded` bigint NOT NULL,
+ `duration` bigint NOT NULL,
+ `karma` double NOT NULL,
+ `seeding_time` bigint NOT NULL,
+ `seeds` bigint NOT NULL,
+ `share_ratio` double NOT NULL,
+ `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `uploaded` bigint NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `UK74jaepieaj2umswpqn16yy3x5`(`slug` ASC) USING BTREE,
+ INDEX `IDX74jaepieaj2umswpqn16yy3x5`(`slug` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of exam_plans
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for exams
+-- ----------------------------
+DROP TABLE IF EXISTS `exams`;
+CREATE TABLE `exams` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `end_at` datetime(6) NOT NULL,
+ `exam_plan_id` bigint NULL DEFAULT NULL,
+ `user_id` bigint NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `UK2wii0igd3vdfecy00op0un4qt`(`user_id` ASC) USING BTREE,
+ INDEX `IDX2wii0igd3vdfecy00op0un4qt`(`user_id` ASC) USING BTREE,
+ INDEX `FKl0cips1gany3cuppyfs7ntpai`(`exam_plan_id` ASC) USING BTREE,
+ CONSTRAINT `FKi63cpl1xkgy32iq68ru4ypjn4` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ CONSTRAINT `FKl0cips1gany3cuppyfs7ntpai` FOREIGN KEY (`exam_plan_id`) REFERENCES `exam_plans` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of exams
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for login_history
+-- ----------------------------
+DROP TABLE IF EXISTS `login_history`;
+CREATE TABLE `login_history` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `user_id` bigint NOT NULL,
+ `time` timestamp NOT NULL,
+ `type` enum('ACCOUNT','PASSKEY','PERSONAL_ACCESSTOKEN','PROGRAM_INTERNAL','TWO_STEP_VERIFICATION') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `ip_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `user_agent` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `idx_login_time`(`time` ASC) USING BTREE,
+ INDEX `fk_loginhistory_user`(`user_id` ASC) USING BTREE,
+ INDEX `IDX3lft44makrxommxm63k7xj77d`(`time` ASC) USING BTREE,
+ CONSTRAINT `fk_loginhistory_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 33 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of login_history
+-- ----------------------------
+INSERT INTO `login_history` VALUES (1, 1, '2025-06-03 12:25:33', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (2, 1, '2025-06-03 12:51:42', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (3, 1, '2025-06-03 12:52:55', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (4, 1, '2025-06-03 14:20:55', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (5, 1, '2025-06-03 14:31:13', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.43.4', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (6, 1, '2025-06-04 03:40:10', 'ACCOUNT', '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.44.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (7, 1, '2025-06-04 03:43:09', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (8, 1, '2025-06-04 03:44:27', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (9, 1, '2025-06-04 03:51:35', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (10, 1, '2025-06-04 03:52:22', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (11, 1, '2025-06-04 03:52:53', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (12, 1, '2025-06-04 03:53:12', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (13, 1, '2025-06-04 03:54:46', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (14, 1, '2025-06-04 03:58:14', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (15, 1, '2025-06-04 04:22:30', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (16, 1, '2025-06-04 04:43:29', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (17, 1, '2025-06-04 04:54:09', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (18, 1, '2025-06-04 04:59:13', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (19, 1, '2025-06-04 05:17:07', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (20, 1, '2025-06-04 05:18:28', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (21, 1, '2025-06-04 05:21:25', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (22, 1, '2025-06-04 05:21:58', 'PASSKEY', '192.168.10.10', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (23, 1, '2025-06-04 05:22:24', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (24, 1, '2025-06-04 05:22:30', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (25, 1, '2025-06-04 05:27:44', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (26, 1, '2025-06-04 05:27:50', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (27, 1, '2025-06-04 05:31:45', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (28, 1, '2025-06-04 05:33:00', 'PASSKEY', '192.168.10.10', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (29, 1, '2025-06-04 06:11:31', 'PASSKEY', '192.168.254.1', 'qBittorrent/5.1.0', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (30, 1, '2025-06-04 06:12:13', 'PASSKEY', '192.168.254.1', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (31, 1, '2025-06-04 06:12:27', 'PASSKEY', '192.168.254.1', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+INSERT INTO `login_history` VALUES (32, 1, '2025-06-04 06:13:21', 'PASSKEY', '192.168.254.1', 'Transmission/4.0.6', 'Unknown - GeoIP not initialized');
+
+-- ----------------------------
+-- Table structure for peers
+-- ----------------------------
+DROP TABLE IF EXISTS `peers`;
+CREATE TABLE `peers` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `port` int NOT NULL,
+ `info_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `peer_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `user_agent` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `uploaded` bigint NOT NULL,
+ `downloaded` bigint NOT NULL,
+ `to_go` bigint NOT NULL,
+ `seeder` tinyint(1) NOT NULL,
+ `partial_seeder` tinyint(1) NOT NULL,
+ `passkey` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `update_at` timestamp NOT NULL,
+ `seeding_time` bigint NOT NULL,
+ `upload_speed` bigint NOT NULL,
+ `download_speed` bigint NOT NULL,
+ `user_id` bigint NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_peers_ip_port_infohash`(`ip` ASC, `port` ASC, `info_hash` ASC) USING BTREE,
+ UNIQUE INDEX `UKoa8l3xqdvxr898mosks3hq3cb`(`ip` ASC, `port` ASC, `info_hash` ASC) USING BTREE,
+ INDEX `idx_peers_update_at`(`update_at` ASC) USING BTREE,
+ INDEX `fk_peers_user`(`user_id` ASC) USING BTREE,
+ INDEX `IDXmmvk33liy7j5u9e4qhxw2d7h5`(`update_at` ASC) USING BTREE,
+ CONSTRAINT `fk_peers_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+
+-- ----------------------------
+-- Table structure for permissions
+-- ----------------------------
+DROP TABLE IF EXISTS `permissions`;
+CREATE TABLE `permissions` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `def` tinyint(1) NOT NULL,
+ `user_group_id` bigint NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_permissions_slug`(`slug` ASC) USING BTREE,
+ UNIQUE INDEX `UKdv6mwikptsu70hcrjq07sqsfy`(`slug` ASC) USING BTREE,
+ INDEX `fk_permissions_user_group`(`user_group_id` ASC) USING BTREE,
+ CONSTRAINT `fk_permissions_user_group` FOREIGN KEY (`user_group_id`) REFERENCES `user_groups` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of permissions
+-- ----------------------------
+INSERT INTO `permissions` VALUES (1, 'torrent:upload', 1, 1);
+INSERT INTO `permissions` VALUES (2, 'torrent:download', 1, 1);
+INSERT INTO `permissions` VALUES (3, 'torrent:view', 1, 1);
+INSERT INTO `permissions` VALUES (4, 'torrent:search', 1, 1);
+INSERT INTO `permissions` VALUES (5, 'comment:create', 1, 1);
+INSERT INTO `permissions` VALUES (6, 'user:manage', 1, 1);
+INSERT INTO `permissions` VALUES (7, 'torrent:approve', 1, 1);
+INSERT INTO `permissions` VALUES (8, 'torrent:thanks', 1, 1);
+INSERT INTO `permissions` VALUES (9, 'promotion:list', 1, 1);
+
+-- ----------------------------
+-- Table structure for promotion_policies
+-- ----------------------------
+DROP TABLE IF EXISTS `promotion_policies`;
+CREATE TABLE `promotion_policies` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `upload_ratio` double NULL DEFAULT NULL,
+ `download_ratio` double NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_promotion_policies_slug`(`slug` ASC) USING BTREE,
+ UNIQUE INDEX `UKcjqpe1g15outfc0u6ajvpwxoe`(`slug` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of promotion_policies
+-- ----------------------------
+INSERT INTO `promotion_policies` VALUES (1, 'default', '默认策略', 1, 1);
+INSERT INTO `promotion_policies` VALUES (2, 'vip', '活跃用户策略', 1, 1.5);
+
+-- ----------------------------
+-- Table structure for qrtz_blob_triggers
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_blob_triggers`;
+CREATE TABLE `qrtz_blob_triggers` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `BLOB_DATA` blob NULL,
+ PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
+ INDEX `SCHED_NAME`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE,
+ CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_blob_triggers
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for qrtz_calendars
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_calendars`;
+CREATE TABLE `qrtz_calendars` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `CALENDAR` blob NOT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_calendars
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for qrtz_cron_triggers
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_cron_triggers`;
+CREATE TABLE `qrtz_cron_triggers` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `CRON_EXPRESSION` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TIME_ZONE_ID` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
+ CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_cron_triggers
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for qrtz_fired_triggers
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_fired_triggers`;
+CREATE TABLE `qrtz_fired_triggers` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `ENTRY_ID` varchar(95) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `FIRED_TIME` bigint NOT NULL,
+ `SCHED_TIME` bigint NOT NULL,
+ `PRIORITY` int NOT NULL,
+ `STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`) USING BTREE,
+ INDEX `IDX_QRTZ_FT_TRIG_INST_NAME`(`SCHED_NAME` ASC, `INSTANCE_NAME` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY`(`SCHED_NAME` ASC, `INSTANCE_NAME` ASC, `REQUESTS_RECOVERY` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_FT_J_G`(`SCHED_NAME` ASC, `JOB_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_FT_JG`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_FT_T_G`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_FT_TG`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_fired_triggers
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for qrtz_job_details
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_job_details`;
+CREATE TABLE `qrtz_job_details` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `IS_DURABLE` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `JOB_DATA` blob NULL,
+ PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE,
+ INDEX `IDX_QRTZ_J_REQ_RECOVERY`(`SCHED_NAME` ASC, `REQUESTS_RECOVERY` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_J_GRP`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_job_details
+-- ----------------------------
+INSERT INTO `qrtz_job_details` VALUES ('sapling_scheduler', 'peers_cleanup', 'DEFAULT', 'Peers Cleanup', 'com.github.example.pt.crontask.PeersCleanup', '1', '0', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787000737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F40000000000010770800000010000000007800);
+
+-- ----------------------------
+-- Table structure for qrtz_locks
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_locks`;
+CREATE TABLE `qrtz_locks` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `LOCK_NAME` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `LOCK_NAME`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_locks
+-- ----------------------------
+INSERT INTO `qrtz_locks` VALUES ('sapling_scheduler', 'STATE_ACCESS');
+INSERT INTO `qrtz_locks` VALUES ('sapling_scheduler', 'TRIGGER_ACCESS');
+
+-- ----------------------------
+-- Table structure for qrtz_paused_trigger_grps
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`;
+CREATE TABLE `qrtz_paused_trigger_grps` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_paused_trigger_grps
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for qrtz_scheduler_state
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_scheduler_state`;
+CREATE TABLE `qrtz_scheduler_state` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `INSTANCE_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `LAST_CHECKIN_TIME` bigint NOT NULL,
+ `CHECKIN_INTERVAL` bigint NOT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_scheduler_state
+-- ----------------------------
+INSERT INTO `qrtz_scheduler_state` VALUES ('sapling_scheduler', 'LAPTOP-V24K5A551749018489588', 1749018510182, 10000);
+
+-- ----------------------------
+-- Table structure for qrtz_simple_triggers
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_simple_triggers`;
+CREATE TABLE `qrtz_simple_triggers` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `REPEAT_COUNT` bigint NOT NULL,
+ `REPEAT_INTERVAL` bigint NOT NULL,
+ `TIMES_TRIGGERED` bigint NOT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
+ CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_simple_triggers
+-- ----------------------------
+INSERT INTO `qrtz_simple_triggers` VALUES ('sapling_scheduler', '6da64b5bd2ee-37ffa82a-a598-485c-9718-40ee90c26bc4', 'DEFAULT', -1, 1800000, 1);
+
+-- ----------------------------
+-- Table structure for qrtz_simprop_triggers
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_simprop_triggers`;
+CREATE TABLE `qrtz_simprop_triggers` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `STR_PROP_1` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `STR_PROP_2` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `STR_PROP_3` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `INT_PROP_1` int NULL DEFAULT NULL,
+ `INT_PROP_2` int NULL DEFAULT NULL,
+ `LONG_PROP_1` bigint NULL DEFAULT NULL,
+ `LONG_PROP_2` bigint NULL DEFAULT NULL,
+ `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL,
+ `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL,
+ `BOOL_PROP_1` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `BOOL_PROP_2` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
+ CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_simprop_triggers
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for qrtz_triggers
+-- ----------------------------
+DROP TABLE IF EXISTS `qrtz_triggers`;
+CREATE TABLE `qrtz_triggers` (
+ `SCHED_NAME` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `JOB_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `JOB_GROUP` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `DESCRIPTION` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `NEXT_FIRE_TIME` bigint NULL DEFAULT NULL,
+ `PREV_FIRE_TIME` bigint NULL DEFAULT NULL,
+ `PRIORITY` int NULL DEFAULT NULL,
+ `TRIGGER_STATE` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `TRIGGER_TYPE` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `START_TIME` bigint NOT NULL,
+ `END_TIME` bigint NULL DEFAULT NULL,
+ `CALENDAR_NAME` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
+ `MISFIRE_INSTR` smallint NULL DEFAULT NULL,
+ `JOB_DATA` blob NULL,
+ PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE,
+ INDEX `IDX_QRTZ_T_J`(`SCHED_NAME` ASC, `JOB_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_JG`(`SCHED_NAME` ASC, `JOB_GROUP` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_C`(`SCHED_NAME` ASC, `CALENDAR_NAME` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_G`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_STATE`(`SCHED_NAME` ASC, `TRIGGER_STATE` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_N_STATE`(`SCHED_NAME` ASC, `TRIGGER_NAME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_N_G_STATE`(`SCHED_NAME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_NEXT_FIRE_TIME`(`SCHED_NAME` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_NFT_ST`(`SCHED_NAME` ASC, `TRIGGER_STATE` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_NFT_MISFIRE`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC, `TRIGGER_STATE` ASC) USING BTREE,
+ INDEX `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP`(`SCHED_NAME` ASC, `MISFIRE_INSTR` ASC, `NEXT_FIRE_TIME` ASC, `TRIGGER_GROUP` ASC, `TRIGGER_STATE` ASC) USING BTREE,
+ CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of qrtz_triggers
+-- ----------------------------
+INSERT INTO `qrtz_triggers` VALUES ('sapling_scheduler', '6da64b5bd2ee-37ffa82a-a598-485c-9718-40ee90c26bc4', 'DEFAULT', 'peers_cleanup', 'DEFAULT', NULL, 1749020288505, 1749018488505, 5, 'WAITING', 'SIMPLE', 1749018488505, 0, NULL, 0, '');
+
+-- ----------------------------
+-- Table structure for seedbox
+-- ----------------------------
+DROP TABLE IF EXISTS `seedbox`;
+CREATE TABLE `seedbox` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `download_multiplier_id` bigint NULL DEFAULT NULL,
+ `upload_multiplier_id` bigint NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `UKecbehjtg3bfr4rmyixt1gcvfq`(`address` ASC) USING BTREE,
+ INDEX `FKq63tqhykgl96l4rkwy9widy5b`(`download_multiplier_id` ASC) USING BTREE,
+ INDEX `FK9xl51na3dn8k7ou8cyv7s1wrf`(`upload_multiplier_id` ASC) USING BTREE,
+ CONSTRAINT `FK9xl51na3dn8k7ou8cyv7s1wrf` FOREIGN KEY (`upload_multiplier_id`) REFERENCES `promotion_policies` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ CONSTRAINT `FKq63tqhykgl96l4rkwy9widy5b` FOREIGN KEY (`download_multiplier_id`) REFERENCES `promotion_policies` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of seedbox
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for settings
+-- ----------------------------
+DROP TABLE IF EXISTS `settings`;
+CREATE TABLE `settings` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `setting_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `setting_value` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_settings_setting_key`(`setting_key` ASC) USING BTREE,
+ UNIQUE INDEX `UKswd05dvj4ukvw5q135bpbbfae`(`setting_key` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for tags
+-- ----------------------------
+DROP TABLE IF EXISTS `tags`;
+CREATE TABLE `tags` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_tags_name`(`name` ASC) USING BTREE,
+ UNIQUE INDEX `UKt48xdq560gs3gap9g7jg36kgc`(`name` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of tags
+-- ----------------------------
+INSERT INTO `tags` VALUES (9, '[\"linux\"]');
+INSERT INTO `tags` VALUES (3, 'debian');
+INSERT INTO `tags` VALUES (1, 'linux');
+INSERT INTO `tags` VALUES (5, 'macos');
+INSERT INTO `tags` VALUES (2, 'ubuntu');
+INSERT INTO `tags` VALUES (4, 'windows');
+
+-- ----------------------------
+-- Table structure for thanks
+-- ----------------------------
+DROP TABLE IF EXISTS `thanks`;
+CREATE TABLE `thanks` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `torrent_id` bigint NULL DEFAULT NULL,
+ `user_id` bigint NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `UKrt9lg0h53brgpf9iat5hcmf6g`(`user_id` ASC, `torrent_id` ASC) USING BTREE,
+ INDEX `FKp3kgh25tko48vq7x6u2w3dvpp`(`torrent_id` ASC) USING BTREE,
+ CONSTRAINT `FK2t90h21s5hyx6hynewsdlk46j` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ CONSTRAINT `FKp3kgh25tko48vq7x6u2w3dvpp` FOREIGN KEY (`torrent_id`) REFERENCES `torrents` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of thanks
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for torrents
+-- ----------------------------
+DROP TABLE IF EXISTS `torrents`;
+CREATE TABLE `torrents` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `info_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `user_id` bigint NULL DEFAULT NULL,
+ `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `sub_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `size` bigint NOT NULL,
+ `created_at` timestamp NOT NULL,
+ `updated_at` timestamp NOT NULL,
+ `under_review` tinyint(1) NOT NULL,
+ `anonymous` tinyint(1) NOT NULL,
+ `category_id` bigint NULL DEFAULT NULL,
+ `promotion_policy_id` bigint NULL DEFAULT NULL,
+ `description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_torrents_info_hash`(`info_hash` ASC) USING BTREE,
+ UNIQUE INDEX `UKhag2ej1vo8snvirb1lv4b8r4x`(`info_hash` ASC) USING BTREE,
+ INDEX `idx_torrents_title`(`title` ASC) USING BTREE,
+ INDEX `idx_torrents_sub_title`(`sub_title` ASC) USING BTREE,
+ INDEX `idx_torrents_promotion_policy_id`(`promotion_policy_id` ASC) USING BTREE,
+ INDEX `fk_torrents_user`(`user_id` ASC) USING BTREE,
+ INDEX `fk_torrents_category`(`category_id` ASC) USING BTREE,
+ INDEX `IDXdplkaapqslelnscuunfpm9eb6`(`title` ASC) USING BTREE,
+ INDEX `IDX6r5kh6i4awpdlytjmm06pk22k`(`sub_title` ASC) USING BTREE,
+ INDEX `IDXd2j3h8td7682cctkv5o77b33y`(`promotion_policy_id` ASC) USING BTREE,
+ CONSTRAINT `fk_torrents_category` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT,
+ CONSTRAINT `fk_torrents_promotion_policy` FOREIGN KEY (`promotion_policy_id`) REFERENCES `promotion_policies` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT,
+ CONSTRAINT `fk_torrents_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of torrents
+-- ----------------------------
+INSERT INTO `torrents` VALUES (7, '499e9c69e90b976c5c84542cf9b88fad1e12ef1c', 1, 'example torrent title', 'subtitle here', 66194, '2025-06-04 03:41:27', '2025-06-04 03:41:27', 0, 0, 1, 1, '演示种子');
+INSERT INTO `torrents` VALUES (8, 'f45775564c88b5a2782a301d162e1d4811b0b6d5', 1, 'example torrent title', 'subtitle here', 231105, '2025-06-04 05:20:37', '2025-06-04 05:20:37', 0, 0, 1, 1, '演示种子');
+INSERT INTO `torrents` VALUES (9, '8e10c9daa1b5fb18dc5b0e73988808ba958391fa', 1, 'example torrent title', 'subtitle here', 426155, '2025-06-04 06:03:49', '2025-06-04 06:03:49', 0, 0, 1, 1, '演示种子');
+INSERT INTO `torrents` VALUES (10, '1e3275f54ec074af2d99828311d4a8488eb7a487', 1, 'example torrent title', 'subtitle here', 13861694, '2025-06-04 06:10:23', '2025-06-04 06:10:23', 0, 0, 1, 1, '演示种子');
+
+-- ----------------------------
+-- Table structure for torrents_tag
+-- ----------------------------
+DROP TABLE IF EXISTS `torrents_tag`;
+CREATE TABLE `torrents_tag` (
+ `torrent_id` bigint NOT NULL,
+ `tag_id` bigint NOT NULL,
+ PRIMARY KEY (`torrent_id`, `tag_id`) USING BTREE,
+ INDEX `fk_torrents_tag_tag`(`tag_id` ASC) USING BTREE,
+ CONSTRAINT `fk_torrents_tag_tag` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT,
+ CONSTRAINT `fk_torrents_tag_torrent` FOREIGN KEY (`torrent_id`) REFERENCES `torrents` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of torrents_tag
+-- ----------------------------
+INSERT INTO `torrents_tag` VALUES (7, 9);
+INSERT INTO `torrents_tag` VALUES (8, 9);
+INSERT INTO `torrents_tag` VALUES (9, 9);
+INSERT INTO `torrents_tag` VALUES (10, 9);
+
+-- ----------------------------
+-- Table structure for transfer_history
+-- ----------------------------
+DROP TABLE IF EXISTS `transfer_history`;
+CREATE TABLE `transfer_history` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `user_id` bigint NOT NULL,
+ `torrent_id` bigint NOT NULL,
+ `to_go` bigint NOT NULL,
+ `started_at` timestamp NOT NULL,
+ `updated_at` timestamp NOT NULL,
+ `uploaded` bigint NOT NULL,
+ `downloaded` bigint NOT NULL,
+ `actual_uploaded` bigint NOT NULL,
+ `actual_downloaded` bigint NOT NULL,
+ `upload_speed` bigint NOT NULL,
+ `download_speed` bigint NOT NULL,
+ `last_event` enum('started','completed','stopped','paused','unknown') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `have_complete_history` tinyint(1) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_user_torrent`(`user_id` ASC, `torrent_id` ASC) USING BTREE,
+ UNIQUE INDEX `UKrm5p4xv3rb2vm6psql5je94jh`(`user_id` ASC, `torrent_id` ASC) USING BTREE,
+ INDEX `fk_transfer_torrent`(`torrent_id` ASC) USING BTREE,
+ CONSTRAINT `fk_transfer_torrent` FOREIGN KEY (`torrent_id`) REFERENCES `torrents` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ CONSTRAINT `fk_transfer_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of transfer_history
+-- ----------------------------
+INSERT INTO `transfer_history` VALUES (1, 1, 7, 66194, '2025-06-04 04:43:30', '2025-06-04 05:21:25', 0, 0, 0, 0, 0, 0, 'completed', 1);
+INSERT INTO `transfer_history` VALUES (2, 1, 10, 0, '2025-06-04 06:11:31', '2025-06-04 06:13:21', 27723388, 0, 0, 27723388, 0, 77874, 'started', 1);
+
+-- ----------------------------
+-- Table structure for user_groups
+-- ----------------------------
+DROP TABLE IF EXISTS `user_groups`;
+CREATE TABLE `user_groups` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `slug` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `display_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `promotion_policy_id` bigint NULL DEFAULT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_user_groups_slug`(`slug` ASC) USING BTREE,
+ UNIQUE INDEX `UKkkje1jbmrkam1k7jbd39homw0`(`slug` ASC) USING BTREE,
+ INDEX `fk_user_groups_promotion_policy`(`promotion_policy_id` ASC) USING BTREE,
+ CONSTRAINT `fk_user_groups_promotion_policy` FOREIGN KEY (`promotion_policy_id`) REFERENCES `promotion_policies` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of user_groups
+-- ----------------------------
+INSERT INTO `user_groups` VALUES (1, 'default', '默认用户组', 1);
+INSERT INTO `user_groups` VALUES (2, 'vip', '活跃用户组', 2);
+
+-- ----------------------------
+-- Table structure for user_groups_permission_entities
+-- ----------------------------
+DROP TABLE IF EXISTS `user_groups_permission_entities`;
+CREATE TABLE `user_groups_permission_entities` (
+ `user_group_id` bigint NOT NULL,
+ `permission_entities_id` bigint NOT NULL,
+ PRIMARY KEY (`user_group_id`, `permission_entities_id`) USING BTREE,
+ UNIQUE INDEX `UK_95j9uaq96bvd9ykn0sngywks6`(`permission_entities_id` ASC) USING BTREE,
+ CONSTRAINT `fk_ugpe_permission` FOREIGN KEY (`permission_entities_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT,
+ CONSTRAINT `fk_ugpe_user_group` FOREIGN KEY (`user_group_id`) REFERENCES `user_groups` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of user_groups_permission_entities
+-- ----------------------------
+INSERT INTO `user_groups_permission_entities` VALUES (1, 1);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 2);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 3);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 4);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 5);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 6);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 7);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 8);
+INSERT INTO `user_groups_permission_entities` VALUES (1, 9);
+
+-- ----------------------------
+-- Table structure for users
+-- ----------------------------
+DROP TABLE IF EXISTS `users`;
+CREATE TABLE `users` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `group_id` bigint NULL DEFAULT NULL,
+ `passkey` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `create_at` timestamp NOT NULL,
+ `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `custom_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `signature` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `language` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `download_bandwidth` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `upload_bandwidth` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `downloaded` bigint NOT NULL,
+ `uploaded` bigint NOT NULL,
+ `real_downloaded` bigint NOT NULL,
+ `real_uploaded` bigint NOT NULL,
+ `isp` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `karma` decimal(19, 2) NOT NULL,
+ `invite_slot` int NOT NULL,
+ `seeding_time` bigint NOT NULL,
+ `personal_access_token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ `privacy_level` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `uk_users_username`(`username` ASC) USING BTREE,
+ UNIQUE INDEX `uk_users_email`(`email` ASC) USING BTREE,
+ UNIQUE INDEX `uk_users_passkey`(`passkey` ASC) USING BTREE,
+ UNIQUE INDEX `UKr43af9ap4edm43mmtq01oddj6`(`username` ASC) USING BTREE,
+ UNIQUE INDEX `UK6dotkott2kjsp8vw4d0m25fb7`(`email` ASC) USING BTREE,
+ UNIQUE INDEX `UK402sx6cqgk66uwt7eyf54tmij`(`passkey` ASC) USING BTREE,
+ INDEX `fk_users_group`(`group_id` ASC) USING BTREE,
+ CONSTRAINT `fk_users_group` FOREIGN KEY (`group_id`) REFERENCES `user_groups` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- 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');
+
+SET FOREIGN_KEY_CHECKS = 1;
diff --git a/target/surefire-reports/TEST-com.github.example.pt.ptApplicationTests.xml b/target/surefire-reports/TEST-com.github.example.pt.ptApplicationTests.xml
index 5bfe282..4553a76 100644
--- a/target/surefire-reports/TEST-com.github.example.pt.ptApplicationTests.xml
+++ b/target/surefire-reports/TEST-com.github.example.pt.ptApplicationTests.xml
@@ -1,63 +1,63 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="com.github.example.pt.ptApplicationTests" time="12.046" tests="1" errors="0" skipped="0" failures="0">
- <properties>
- <property name="java.specification.version" value="17"/>
- <property name="sun.cpu.isalist" value="amd64"/>
- <property name="sun.jnu.encoding" value="GBK"/>
- <property name="java.class.path" value="E:\desktop\EX\PT_Sixth_Backend_MVN\target\test-classes;E:\desktop\EX\PT_Sixth_Backend_MVN\target\classes;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-cache\3.0.2\spring-boot-starter-cache-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter\3.0.2\spring-boot-starter-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-logging\3.0.2\spring-boot-starter-logging-3.0.2.jar;C:\Users\张家豪\.m2\repository\ch\qos\logback\logback-classic\1.4.5\logback-classic-1.4.5.jar;C:\Users\张家豪\.m2\repository\ch\qos\logback\logback-core\1.4.5\logback-core-1.4.5.jar;C:\Users\张家豪\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.19.0\log4j-to-slf4j-2.19.0.jar;C:\Users\张家豪\.m2\repository\org\apache\logging\log4j\log4j-api\2.19.0\log4j-api-2.19.0.jar;C:\Users\张家豪\.m2\repository\org\slf4j\jul-to-slf4j\2.0.6\jul-to-slf4j-2.0.6.jar;C:\Users\张家豪\.m2\repository\org\yaml\snakeyaml\1.33\snakeyaml-1.33.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-context-support\6.0.4\spring-context-support-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-beans\6.0.4\spring-beans-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-context\6.0.4\spring-context-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-data-redis\3.0.2\spring-boot-starter-data-redis-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-redis\3.0.1\spring-data-redis-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-keyvalue\3.0.1\spring-data-keyvalue-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-oxm\6.0.4\spring-oxm-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-aop\6.0.4\spring-aop-6.0.4.jar;C:\Users\张家豪\.m2\repository\io\lettuce\lettuce-core\6.2.2.RELEASE\lettuce-core-6.2.2.RELEASE.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-common\4.1.87.Final\netty-common-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-handler\4.1.87.Final\netty-handler-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.87.Final\netty-transport-native-unix-common-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-transport\4.1.87.Final\netty-transport-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\projectreactor\reactor-core\3.5.2\reactor-core-3.5.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\3.0.2\spring-boot-starter-data-jpa-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-aop\3.0.2\spring-boot-starter-aop-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\aspectj\aspectjweaver\1.9.19\aspectjweaver-1.9.19.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\3.0.2\spring-boot-starter-jdbc-3.0.2.jar;C:\Users\张家豪\.m2\repository\com\zaxxer\HikariCP\5.0.1\HikariCP-5.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-jdbc\6.0.4\spring-jdbc-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\hibernate\orm\hibernate-core\6.1.6.Final\hibernate-core-6.1.6.Final.jar;C:\Users\张家豪\.m2\repository\jakarta\persistence\jakarta.persistence-api\3.1.0\jakarta.persistence-api-3.1.0.jar;C:\Users\张家豪\.m2\repository\jakarta\transaction\jakarta.transaction-api\2.0.1\jakarta.transaction-api-2.0.1.jar;C:\Users\张家豪\.m2\repository\org\jboss\logging\jboss-logging\3.5.0.Final\jboss-logging-3.5.0.Final.jar;C:\Users\张家豪\.m2\repository\org\hibernate\common\hibernate-commons-annotations\6.0.2.Final\hibernate-commons-annotations-6.0.2.Final.jar;C:\Users\张家豪\.m2\repository\org\jboss\jandex\2.4.2.Final\jandex-2.4.2.Final.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\张家豪\.m2\repository\net\bytebuddy\byte-buddy\1.12.22\byte-buddy-1.12.22.jar;C:\Users\张家豪\.m2\repository\org\glassfish\jaxb\jaxb-runtime\4.0.1\jaxb-runtime-4.0.1.jar;C:\Users\张家豪\.m2\repository\org\glassfish\jaxb\jaxb-core\4.0.1\jaxb-core-4.0.1.jar;C:\Users\张家豪\.m2\repository\org\glassfish\jaxb\txw2\4.0.1\txw2-4.0.1.jar;C:\Users\张家豪\.m2\repository\com\sun\istack\istack-commons-runtime\4.1.1\istack-commons-runtime-4.1.1.jar;C:\Users\张家豪\.m2\repository\jakarta\inject\jakarta.inject-api\2.0.0\jakarta.inject-api-2.0.0.jar;C:\Users\张家豪\.m2\repository\org\antlr\antlr4-runtime\4.10.1\antlr4-runtime-4.10.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-jpa\3.0.1\spring-data-jpa-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-commons\3.0.1\spring-data-commons-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-orm\6.0.4\spring-orm-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-aspects\6.0.4\spring-aspects-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-mail\3.0.2\spring-boot-starter-mail-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\eclipse\angus\jakarta.mail\1.0.0\jakarta.mail-1.0.0.jar;C:\Users\张家豪\.m2\repository\jakarta\activation\jakarta.activation-api\2.1.1\jakarta.activation-api-2.1.1.jar;C:\Users\张家豪\.m2\repository\org\eclipse\angus\angus-activation\1.0.0\angus-activation-1.0.0.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-quartz\3.0.2\spring-boot-starter-quartz-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-tx\6.0.4\spring-tx-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\quartz-scheduler\quartz\2.3.2\quartz-2.3.2.jar;C:\Users\张家豪\.m2\repository\com\mchange\mchange-commons-java\0.2.15\mchange-commons-java-0.2.15.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-validation\3.0.2\spring-boot-starter-validation-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\10.1.5\tomcat-embed-el-10.1.5.jar;C:\Users\张家豪\.m2\repository\org\hibernate\validator\hibernate-validator\8.0.0.Final\hibernate-validator-8.0.0.Final.jar;C:\Users\张家豪\.m2\repository\jakarta\validation\jakarta.validation-api\3.0.2\jakarta.validation-api-3.0.2.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-spring-boot3-starter\1.34.0\sa-token-spring-boot3-starter-1.34.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-jakarta-servlet\1.34.0\sa-token-jakarta-servlet-1.34.0.jar;C:\Users\张家豪\.m2\repository\jakarta\servlet\jakarta.servlet-api\6.0.0\jakarta.servlet-api-6.0.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-spring-boot-autoconfig\1.34.0\sa-token-spring-boot-autoconfig-1.34.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-dao-redis-jackson\1.34.0\sa-token-dao-redis-jackson-1.34.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-core\1.34.0\sa-token-core-1.34.0.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-web\3.0.2\spring-boot-starter-web-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-web\6.0.4\spring-web-6.0.4.jar;C:\Users\张家豪\.m2\repository\io\micrometer\micrometer-observation\1.10.3\micrometer-observation-1.10.3.jar;C:\Users\张家豪\.m2\repository\io\micrometer\micrometer-commons\1.10.3\micrometer-commons-1.10.3.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-webmvc\6.0.4\spring-webmvc-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-expression\6.0.4\spring-expression-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-json\3.0.2\spring-boot-starter-json-3.0.2.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.14.1\jackson-databind-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.14.1\jackson-datatype-jdk8-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.14.1\jackson-module-parameter-names-2.14.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\3.0.2\spring-boot-starter-tomcat-3.0.2.jar;C:\Users\张家豪\.m2\repository\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;C:\Users\张家豪\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\10.1.5\tomcat-embed-core-10.1.5.jar;C:\Users\张家豪\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.5\tomcat-embed-websocket-10.1.5.jar;C:\Users\张家豪\.m2\repository\commons-io\commons-io\2.11.0\commons-io-2.11.0.jar;C:\Users\张家豪\.m2\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;C:\Users\张家豪\.m2\repository\commons-validator\commons-validator\1.7\commons-validator-1.7.jar;C:\Users\张家豪\.m2\repository\commons-beanutils\commons-beanutils\1.9.4\commons-beanutils-1.9.4.jar;C:\Users\张家豪\.m2\repository\commons-digester\commons-digester\2.1\commons-digester-2.1.jar;C:\Users\张家豪\.m2\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;C:\Users\张家豪\.m2\repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-lang3\3.12.0\commons-lang3-3.12.0.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-text\1.10.0\commons-text-1.10.0.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-compress\1.22\commons-compress-1.22.jar;C:\Users\张家豪\.m2\repository\org\jetbrains\annotations\23.1.0\annotations-23.1.0.jar;C:\Users\张家豪\.m2\repository\com\google\guava\guava\31.1-jre\guava-31.1-jre.jar;C:\Users\张家豪\.m2\repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;C:\Users\张家豪\.m2\repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;C:\Users\张家豪\.m2\repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\checkerframework\checker-qual\3.12.0\checker-qual-3.12.0.jar;C:\Users\张家豪\.m2\repository\com\google\errorprone\error_prone_annotations\2.11.0\error_prone_annotations-2.11.0.jar;C:\Users\张家豪\.m2\repository\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar;C:\Users\张家豪\.m2\repository\at\favre\lib\bcrypt\0.9.0\bcrypt-0.9.0.jar;C:\Users\张家豪\.m2\repository\at\favre\lib\bytes\1.3.0\bytes-1.3.0.jar;C:\Users\张家豪\.m2\repository\com\konghq\unirest-java\3.14.1\unirest-java-3.14.1.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpclient\4.5.14\httpclient-4.5.14.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpcore\4.4.16\httpcore-4.4.16.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpmime\4.5.14\httpmime-4.5.14.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpcore-nio\4.4.16\httpcore-nio-4.4.16.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpasyncclient\4.1.5\httpasyncclient-4.1.5.jar;C:\Users\张家豪\.m2\repository\com\google\code\gson\gson\2.9.1\gson-2.9.1.jar;C:\Users\张家豪\.m2\repository\me\tongfei\progressbar\0.9.5\progressbar-0.9.5.jar;C:\Users\张家豪\.m2\repository\org\jline\jline\3.21.0\jline-3.21.0.jar;C:\Users\张家豪\.m2\repository\com\dampcake\bencode\1.4\bencode-1.4.jar;C:\Users\张家豪\.m2\repository\com\mysql\mysql-connector-j\8.0.32\mysql-connector-j-8.0.32.jar;C:\Users\张家豪\.m2\repository\com\h2database\h2\2.1.214\h2-2.1.214.jar;C:\Users\张家豪\.m2\repository\org\projectlombok\lombok\1.18.24\lombok-1.18.24.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-devtools\3.0.2\spring-boot-devtools-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot\3.0.2\spring-boot-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\3.0.2\spring-boot-autoconfigure-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-test\3.0.2\spring-boot-starter-test-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-test\3.0.2\spring-boot-test-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\3.0.2\spring-boot-test-autoconfigure-3.0.2.jar;C:\Users\张家豪\.m2\repository\com\jayway\jsonpath\json-path\2.7.0\json-path-2.7.0.jar;C:\Users\张家豪\.m2\repository\net\minidev\json-smart\2.4.8\json-smart-2.4.8.jar;C:\Users\张家豪\.m2\repository\net\minidev\accessors-smart\2.4.8\accessors-smart-2.4.8.jar;C:\Users\张家豪\.m2\repository\org\ow2\asm\asm\9.1\asm-9.1.jar;C:\Users\张家豪\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\4.0.0\jakarta.xml.bind-api-4.0.0.jar;C:\Users\张家豪\.m2\repository\org\assertj\assertj-core\3.23.1\assertj-core-3.23.1.jar;C:\Users\张家豪\.m2\repository\org\hamcrest\hamcrest\2.2\hamcrest-2.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter\5.9.2\junit-jupiter-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.9.2\junit-jupiter-api-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\张家豪\.m2\repository\org\junit\platform\junit-platform-commons\1.9.2\junit-platform-commons-1.9.2.jar;C:\Users\张家豪\.m2\repository\org\apiguardian\apiguardian-api\1.1.2\apiguardian-api-1.1.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.9.2\junit-jupiter-params-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.9.2\junit-jupiter-engine-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\junit\platform\junit-platform-engine\1.9.2\junit-platform-engine-1.9.2.jar;C:\Users\张家豪\.m2\repository\org\mockito\mockito-core\4.8.1\mockito-core-4.8.1.jar;C:\Users\张家豪\.m2\repository\net\bytebuddy\byte-buddy-agent\1.12.22\byte-buddy-agent-1.12.22.jar;C:\Users\张家豪\.m2\repository\org\objenesis\objenesis\3.2\objenesis-3.2.jar;C:\Users\张家豪\.m2\repository\org\mockito\mockito-junit-jupiter\4.8.1\mockito-junit-jupiter-4.8.1.jar;C:\Users\张家豪\.m2\repository\org\skyscreamer\jsonassert\1.5.1\jsonassert-1.5.1.jar;C:\Users\张家豪\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-core\6.0.4\spring-core-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-jcl\6.0.4\spring-jcl-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-test\6.0.4\spring-test-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\xmlunit\xmlunit-core\2.9.1\xmlunit-core-2.9.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.14.1\jackson-datatype-jsr310-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.14.1\jackson-annotations-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.14.1\jackson-core-2.14.1.jar;C:\Users\张家豪\.m2\repository\org\redisson\redisson-hibernate-6\3.19.3\redisson-hibernate-6-3.19.3.jar;C:\Users\张家豪\.m2\repository\org\redisson\redisson\3.19.3\redisson-3.19.3.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-codec\4.1.87.Final\netty-codec-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-buffer\4.1.87.Final\netty-buffer-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-resolver\4.1.87.Final\netty-resolver-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-resolver-dns\4.1.87.Final\netty-resolver-dns-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-codec-dns\4.1.87.Final\netty-codec-dns-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\javax\cache\cache-api\1.1.1\cache-api-1.1.1.jar;C:\Users\张家豪\.m2\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;C:\Users\张家豪\.m2\repository\io\reactivex\rxjava3\rxjava\3.1.6\rxjava-3.1.6.jar;C:\Users\张家豪\.m2\repository\org\jboss\marshalling\jboss-marshalling\2.0.11.Final\jboss-marshalling-2.0.11.Final.jar;C:\Users\张家豪\.m2\repository\org\jboss\marshalling\jboss-marshalling-river\2.0.11.Final\jboss-marshalling-river-2.0.11.Final.jar;C:\Users\张家豪\.m2\repository\com\esotericsoftware\kryo\5.4.0\kryo-5.4.0.jar;C:\Users\张家豪\.m2\repository\com\esotericsoftware\reflectasm\1.11.9\reflectasm-1.11.9.jar;C:\Users\张家豪\.m2\repository\com\esotericsoftware\minlog\1.3.1\minlog-1.3.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.14.1\jackson-dataformat-yaml-2.14.1.jar;C:\Users\张家豪\.m2\repository\org\jodd\jodd-bean\5.1.6\jodd-bean-5.1.6.jar;C:\Users\张家豪\.m2\repository\org\jodd\jodd-core\5.1.6\jodd-core-5.1.6.jar;C:\Users\张家豪\.m2\repository\com\googlecode\owasp-java-html-sanitizer\owasp-java-html-sanitizer\20220608.1\owasp-java-html-sanitizer-20220608.1.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-pool2\2.11.1\commons-pool2-2.11.1.jar;C:\Users\张家豪\.m2\repository\com\rometools\rome\1.18.0\rome-1.18.0.jar;C:\Users\张家豪\.m2\repository\com\rometools\rome-utils\1.18.0\rome-utils-1.18.0.jar;C:\Users\张家豪\.m2\repository\org\jdom\jdom2\2.0.6.1\jdom2-2.0.6.1.jar;C:\Users\张家豪\.m2\repository\org\slf4j\slf4j-api\2.0.6\slf4j-api-2.0.6.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-starter-redis\2.7.3\jetcache-starter-redis-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-autoconfigure\2.7.3\jetcache-autoconfigure-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-anno\2.7.3\jetcache-anno-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-core\2.7.3\jetcache-core-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-anno-api\2.7.3\jetcache-anno-api-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alibaba\fastjson2\fastjson2\2.0.21\fastjson2-2.0.21.jar;C:\Users\张家豪\.m2\repository\com\github\ben-manes\caffeine\caffeine\3.1.2\caffeine-3.1.2.jar;C:\Users\张家豪\.m2\repository\javax\annotation\javax.annotation-api\1.3.1\javax.annotation-api-1.3.1.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-redis\2.7.3\jetcache-redis-2.7.3.jar;C:\Users\张家豪\.m2\repository\redis\clients\jedis\4.3.1\jedis-4.3.1.jar;C:\Users\张家豪\.m2\repository\org\json\json\20220320\json-20220320.jar;C:\Users\张家豪\.m2\repository\org\greenrobot\eventbus-java\3.3.1\eventbus-java-3.3.1.jar;"/>
- <property name="java.vm.vendor" value="Microsoft"/>
- <property name="sun.arch.data.model" value="64"/>
- <property name="user.variant" value=""/>
- <property name="java.vendor.url" value="https://www.microsoft.com"/>
- <property name="user.timezone" value="Asia/Shanghai"/>
- <property name="os.name" value="Windows 11"/>
- <property name="java.vm.specification.version" value="17"/>
- <property name="sun.java.launcher" value="SUN_STANDARD"/>
- <property name="user.country" value="CN"/>
- <property name="sun.boot.library.path" value="C:\Users\张家豪\.jdks\ms-17.0.15\bin"/>
- <property name="sun.java.command" value="C:\WINDOWS\TEMP\surefire4451744251208519186\surefirebooter15867557814126146353.jar C:\Windows\Temp\surefire4451744251208519186 2025-06-04T22-30-38_359-jvmRun1 surefire1302598587474915774tmp surefire_011250240831511699183tmp"/>
- <property name="jdk.debug" value="release"/>
- <property name="surefire.test.class.path" value="E:\desktop\EX\PT_Sixth_Backend_MVN\target\test-classes;E:\desktop\EX\PT_Sixth_Backend_MVN\target\classes;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-cache\3.0.2\spring-boot-starter-cache-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter\3.0.2\spring-boot-starter-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-logging\3.0.2\spring-boot-starter-logging-3.0.2.jar;C:\Users\张家豪\.m2\repository\ch\qos\logback\logback-classic\1.4.5\logback-classic-1.4.5.jar;C:\Users\张家豪\.m2\repository\ch\qos\logback\logback-core\1.4.5\logback-core-1.4.5.jar;C:\Users\张家豪\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.19.0\log4j-to-slf4j-2.19.0.jar;C:\Users\张家豪\.m2\repository\org\apache\logging\log4j\log4j-api\2.19.0\log4j-api-2.19.0.jar;C:\Users\张家豪\.m2\repository\org\slf4j\jul-to-slf4j\2.0.6\jul-to-slf4j-2.0.6.jar;C:\Users\张家豪\.m2\repository\org\yaml\snakeyaml\1.33\snakeyaml-1.33.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-context-support\6.0.4\spring-context-support-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-beans\6.0.4\spring-beans-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-context\6.0.4\spring-context-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-data-redis\3.0.2\spring-boot-starter-data-redis-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-redis\3.0.1\spring-data-redis-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-keyvalue\3.0.1\spring-data-keyvalue-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-oxm\6.0.4\spring-oxm-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-aop\6.0.4\spring-aop-6.0.4.jar;C:\Users\张家豪\.m2\repository\io\lettuce\lettuce-core\6.2.2.RELEASE\lettuce-core-6.2.2.RELEASE.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-common\4.1.87.Final\netty-common-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-handler\4.1.87.Final\netty-handler-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.87.Final\netty-transport-native-unix-common-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-transport\4.1.87.Final\netty-transport-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\projectreactor\reactor-core\3.5.2\reactor-core-3.5.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\3.0.2\spring-boot-starter-data-jpa-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-aop\3.0.2\spring-boot-starter-aop-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\aspectj\aspectjweaver\1.9.19\aspectjweaver-1.9.19.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\3.0.2\spring-boot-starter-jdbc-3.0.2.jar;C:\Users\张家豪\.m2\repository\com\zaxxer\HikariCP\5.0.1\HikariCP-5.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-jdbc\6.0.4\spring-jdbc-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\hibernate\orm\hibernate-core\6.1.6.Final\hibernate-core-6.1.6.Final.jar;C:\Users\张家豪\.m2\repository\jakarta\persistence\jakarta.persistence-api\3.1.0\jakarta.persistence-api-3.1.0.jar;C:\Users\张家豪\.m2\repository\jakarta\transaction\jakarta.transaction-api\2.0.1\jakarta.transaction-api-2.0.1.jar;C:\Users\张家豪\.m2\repository\org\jboss\logging\jboss-logging\3.5.0.Final\jboss-logging-3.5.0.Final.jar;C:\Users\张家豪\.m2\repository\org\hibernate\common\hibernate-commons-annotations\6.0.2.Final\hibernate-commons-annotations-6.0.2.Final.jar;C:\Users\张家豪\.m2\repository\org\jboss\jandex\2.4.2.Final\jandex-2.4.2.Final.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\张家豪\.m2\repository\net\bytebuddy\byte-buddy\1.12.22\byte-buddy-1.12.22.jar;C:\Users\张家豪\.m2\repository\org\glassfish\jaxb\jaxb-runtime\4.0.1\jaxb-runtime-4.0.1.jar;C:\Users\张家豪\.m2\repository\org\glassfish\jaxb\jaxb-core\4.0.1\jaxb-core-4.0.1.jar;C:\Users\张家豪\.m2\repository\org\glassfish\jaxb\txw2\4.0.1\txw2-4.0.1.jar;C:\Users\张家豪\.m2\repository\com\sun\istack\istack-commons-runtime\4.1.1\istack-commons-runtime-4.1.1.jar;C:\Users\张家豪\.m2\repository\jakarta\inject\jakarta.inject-api\2.0.0\jakarta.inject-api-2.0.0.jar;C:\Users\张家豪\.m2\repository\org\antlr\antlr4-runtime\4.10.1\antlr4-runtime-4.10.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-jpa\3.0.1\spring-data-jpa-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-commons\3.0.1\spring-data-commons-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-orm\6.0.4\spring-orm-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-aspects\6.0.4\spring-aspects-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-mail\3.0.2\spring-boot-starter-mail-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\eclipse\angus\jakarta.mail\1.0.0\jakarta.mail-1.0.0.jar;C:\Users\张家豪\.m2\repository\jakarta\activation\jakarta.activation-api\2.1.1\jakarta.activation-api-2.1.1.jar;C:\Users\张家豪\.m2\repository\org\eclipse\angus\angus-activation\1.0.0\angus-activation-1.0.0.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-quartz\3.0.2\spring-boot-starter-quartz-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-tx\6.0.4\spring-tx-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\quartz-scheduler\quartz\2.3.2\quartz-2.3.2.jar;C:\Users\张家豪\.m2\repository\com\mchange\mchange-commons-java\0.2.15\mchange-commons-java-0.2.15.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-validation\3.0.2\spring-boot-starter-validation-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\10.1.5\tomcat-embed-el-10.1.5.jar;C:\Users\张家豪\.m2\repository\org\hibernate\validator\hibernate-validator\8.0.0.Final\hibernate-validator-8.0.0.Final.jar;C:\Users\张家豪\.m2\repository\jakarta\validation\jakarta.validation-api\3.0.2\jakarta.validation-api-3.0.2.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-spring-boot3-starter\1.34.0\sa-token-spring-boot3-starter-1.34.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-jakarta-servlet\1.34.0\sa-token-jakarta-servlet-1.34.0.jar;C:\Users\张家豪\.m2\repository\jakarta\servlet\jakarta.servlet-api\6.0.0\jakarta.servlet-api-6.0.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-spring-boot-autoconfig\1.34.0\sa-token-spring-boot-autoconfig-1.34.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-dao-redis-jackson\1.34.0\sa-token-dao-redis-jackson-1.34.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-core\1.34.0\sa-token-core-1.34.0.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-web\3.0.2\spring-boot-starter-web-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-web\6.0.4\spring-web-6.0.4.jar;C:\Users\张家豪\.m2\repository\io\micrometer\micrometer-observation\1.10.3\micrometer-observation-1.10.3.jar;C:\Users\张家豪\.m2\repository\io\micrometer\micrometer-commons\1.10.3\micrometer-commons-1.10.3.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-webmvc\6.0.4\spring-webmvc-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-expression\6.0.4\spring-expression-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-json\3.0.2\spring-boot-starter-json-3.0.2.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.14.1\jackson-databind-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.14.1\jackson-datatype-jdk8-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.14.1\jackson-module-parameter-names-2.14.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\3.0.2\spring-boot-starter-tomcat-3.0.2.jar;C:\Users\张家豪\.m2\repository\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;C:\Users\张家豪\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\10.1.5\tomcat-embed-core-10.1.5.jar;C:\Users\张家豪\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.5\tomcat-embed-websocket-10.1.5.jar;C:\Users\张家豪\.m2\repository\commons-io\commons-io\2.11.0\commons-io-2.11.0.jar;C:\Users\张家豪\.m2\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;C:\Users\张家豪\.m2\repository\commons-validator\commons-validator\1.7\commons-validator-1.7.jar;C:\Users\张家豪\.m2\repository\commons-beanutils\commons-beanutils\1.9.4\commons-beanutils-1.9.4.jar;C:\Users\张家豪\.m2\repository\commons-digester\commons-digester\2.1\commons-digester-2.1.jar;C:\Users\张家豪\.m2\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;C:\Users\张家豪\.m2\repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-lang3\3.12.0\commons-lang3-3.12.0.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-text\1.10.0\commons-text-1.10.0.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-compress\1.22\commons-compress-1.22.jar;C:\Users\张家豪\.m2\repository\org\jetbrains\annotations\23.1.0\annotations-23.1.0.jar;C:\Users\张家豪\.m2\repository\com\google\guava\guava\31.1-jre\guava-31.1-jre.jar;C:\Users\张家豪\.m2\repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;C:\Users\张家豪\.m2\repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;C:\Users\张家豪\.m2\repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\checkerframework\checker-qual\3.12.0\checker-qual-3.12.0.jar;C:\Users\张家豪\.m2\repository\com\google\errorprone\error_prone_annotations\2.11.0\error_prone_annotations-2.11.0.jar;C:\Users\张家豪\.m2\repository\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar;C:\Users\张家豪\.m2\repository\at\favre\lib\bcrypt\0.9.0\bcrypt-0.9.0.jar;C:\Users\张家豪\.m2\repository\at\favre\lib\bytes\1.3.0\bytes-1.3.0.jar;C:\Users\张家豪\.m2\repository\com\konghq\unirest-java\3.14.1\unirest-java-3.14.1.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpclient\4.5.14\httpclient-4.5.14.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpcore\4.4.16\httpcore-4.4.16.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpmime\4.5.14\httpmime-4.5.14.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpcore-nio\4.4.16\httpcore-nio-4.4.16.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpasyncclient\4.1.5\httpasyncclient-4.1.5.jar;C:\Users\张家豪\.m2\repository\com\google\code\gson\gson\2.9.1\gson-2.9.1.jar;C:\Users\张家豪\.m2\repository\me\tongfei\progressbar\0.9.5\progressbar-0.9.5.jar;C:\Users\张家豪\.m2\repository\org\jline\jline\3.21.0\jline-3.21.0.jar;C:\Users\张家豪\.m2\repository\com\dampcake\bencode\1.4\bencode-1.4.jar;C:\Users\张家豪\.m2\repository\com\mysql\mysql-connector-j\8.0.32\mysql-connector-j-8.0.32.jar;C:\Users\张家豪\.m2\repository\com\h2database\h2\2.1.214\h2-2.1.214.jar;C:\Users\张家豪\.m2\repository\org\projectlombok\lombok\1.18.24\lombok-1.18.24.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-devtools\3.0.2\spring-boot-devtools-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot\3.0.2\spring-boot-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\3.0.2\spring-boot-autoconfigure-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-test\3.0.2\spring-boot-starter-test-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-test\3.0.2\spring-boot-test-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\3.0.2\spring-boot-test-autoconfigure-3.0.2.jar;C:\Users\张家豪\.m2\repository\com\jayway\jsonpath\json-path\2.7.0\json-path-2.7.0.jar;C:\Users\张家豪\.m2\repository\net\minidev\json-smart\2.4.8\json-smart-2.4.8.jar;C:\Users\张家豪\.m2\repository\net\minidev\accessors-smart\2.4.8\accessors-smart-2.4.8.jar;C:\Users\张家豪\.m2\repository\org\ow2\asm\asm\9.1\asm-9.1.jar;C:\Users\张家豪\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\4.0.0\jakarta.xml.bind-api-4.0.0.jar;C:\Users\张家豪\.m2\repository\org\assertj\assertj-core\3.23.1\assertj-core-3.23.1.jar;C:\Users\张家豪\.m2\repository\org\hamcrest\hamcrest\2.2\hamcrest-2.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter\5.9.2\junit-jupiter-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.9.2\junit-jupiter-api-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\张家豪\.m2\repository\org\junit\platform\junit-platform-commons\1.9.2\junit-platform-commons-1.9.2.jar;C:\Users\张家豪\.m2\repository\org\apiguardian\apiguardian-api\1.1.2\apiguardian-api-1.1.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.9.2\junit-jupiter-params-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.9.2\junit-jupiter-engine-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\junit\platform\junit-platform-engine\1.9.2\junit-platform-engine-1.9.2.jar;C:\Users\张家豪\.m2\repository\org\mockito\mockito-core\4.8.1\mockito-core-4.8.1.jar;C:\Users\张家豪\.m2\repository\net\bytebuddy\byte-buddy-agent\1.12.22\byte-buddy-agent-1.12.22.jar;C:\Users\张家豪\.m2\repository\org\objenesis\objenesis\3.2\objenesis-3.2.jar;C:\Users\张家豪\.m2\repository\org\mockito\mockito-junit-jupiter\4.8.1\mockito-junit-jupiter-4.8.1.jar;C:\Users\张家豪\.m2\repository\org\skyscreamer\jsonassert\1.5.1\jsonassert-1.5.1.jar;C:\Users\张家豪\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-core\6.0.4\spring-core-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-jcl\6.0.4\spring-jcl-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-test\6.0.4\spring-test-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\xmlunit\xmlunit-core\2.9.1\xmlunit-core-2.9.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.14.1\jackson-datatype-jsr310-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.14.1\jackson-annotations-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.14.1\jackson-core-2.14.1.jar;C:\Users\张家豪\.m2\repository\org\redisson\redisson-hibernate-6\3.19.3\redisson-hibernate-6-3.19.3.jar;C:\Users\张家豪\.m2\repository\org\redisson\redisson\3.19.3\redisson-3.19.3.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-codec\4.1.87.Final\netty-codec-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-buffer\4.1.87.Final\netty-buffer-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-resolver\4.1.87.Final\netty-resolver-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-resolver-dns\4.1.87.Final\netty-resolver-dns-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-codec-dns\4.1.87.Final\netty-codec-dns-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\javax\cache\cache-api\1.1.1\cache-api-1.1.1.jar;C:\Users\张家豪\.m2\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;C:\Users\张家豪\.m2\repository\io\reactivex\rxjava3\rxjava\3.1.6\rxjava-3.1.6.jar;C:\Users\张家豪\.m2\repository\org\jboss\marshalling\jboss-marshalling\2.0.11.Final\jboss-marshalling-2.0.11.Final.jar;C:\Users\张家豪\.m2\repository\org\jboss\marshalling\jboss-marshalling-river\2.0.11.Final\jboss-marshalling-river-2.0.11.Final.jar;C:\Users\张家豪\.m2\repository\com\esotericsoftware\kryo\5.4.0\kryo-5.4.0.jar;C:\Users\张家豪\.m2\repository\com\esotericsoftware\reflectasm\1.11.9\reflectasm-1.11.9.jar;C:\Users\张家豪\.m2\repository\com\esotericsoftware\minlog\1.3.1\minlog-1.3.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.14.1\jackson-dataformat-yaml-2.14.1.jar;C:\Users\张家豪\.m2\repository\org\jodd\jodd-bean\5.1.6\jodd-bean-5.1.6.jar;C:\Users\张家豪\.m2\repository\org\jodd\jodd-core\5.1.6\jodd-core-5.1.6.jar;C:\Users\张家豪\.m2\repository\com\googlecode\owasp-java-html-sanitizer\owasp-java-html-sanitizer\20220608.1\owasp-java-html-sanitizer-20220608.1.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-pool2\2.11.1\commons-pool2-2.11.1.jar;C:\Users\张家豪\.m2\repository\com\rometools\rome\1.18.0\rome-1.18.0.jar;C:\Users\张家豪\.m2\repository\com\rometools\rome-utils\1.18.0\rome-utils-1.18.0.jar;C:\Users\张家豪\.m2\repository\org\jdom\jdom2\2.0.6.1\jdom2-2.0.6.1.jar;C:\Users\张家豪\.m2\repository\org\slf4j\slf4j-api\2.0.6\slf4j-api-2.0.6.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-starter-redis\2.7.3\jetcache-starter-redis-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-autoconfigure\2.7.3\jetcache-autoconfigure-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-anno\2.7.3\jetcache-anno-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-core\2.7.3\jetcache-core-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-anno-api\2.7.3\jetcache-anno-api-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alibaba\fastjson2\fastjson2\2.0.21\fastjson2-2.0.21.jar;C:\Users\张家豪\.m2\repository\com\github\ben-manes\caffeine\caffeine\3.1.2\caffeine-3.1.2.jar;C:\Users\张家豪\.m2\repository\javax\annotation\javax.annotation-api\1.3.1\javax.annotation-api-1.3.1.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-redis\2.7.3\jetcache-redis-2.7.3.jar;C:\Users\张家豪\.m2\repository\redis\clients\jedis\4.3.1\jedis-4.3.1.jar;C:\Users\张家豪\.m2\repository\org\json\json\20220320\json-20220320.jar;C:\Users\张家豪\.m2\repository\org\greenrobot\eventbus-java\3.3.1\eventbus-java-3.3.1.jar;"/>
- <property name="sun.cpu.endian" value="little"/>
- <property name="user.home" value="C:\Users\张家豪"/>
- <property name="user.language" value="zh"/>
- <property name="java.specification.vendor" value="Oracle Corporation"/>
- <property name="java.version.date" value="2025-04-15"/>
- <property name="java.home" value="C:\Users\张家豪\.jdks\ms-17.0.15"/>
- <property name="file.separator" value="\"/>
- <property name="basedir" value="E:\desktop\EX\PT_Sixth_Backend_MVN"/>
- <property name="java.vm.compressedOopsMode" value="Zero based"/>
- <property name="line.separator" value=" "/>
- <property name="java.vm.specification.vendor" value="Oracle Corporation"/>
- <property name="java.specification.name" value="Java Platform API Specification"/>
- <property name="surefire.real.class.path" value="C:\WINDOWS\TEMP\surefire4451744251208519186\surefirebooter15867557814126146353.jar"/>
- <property name="user.script" value=""/>
- <property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
- <property name="java.runtime.version" value="17.0.15+6-LTS"/>
- <property name="user.name" value="张家豪"/>
- <property name="path.separator" value=";"/>
- <property name="os.version" value="10.0"/>
- <property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
- <property name="file.encoding" value="GBK"/>
- <property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>
- <property name="java.vendor.version" value="Microsoft-11369865"/>
- <property name="localRepository" value="C:\Users\张家豪\.m2\repository"/>
- <property name="java.vendor.url.bug" value="https://github.com/microsoft/openjdk/issues"/>
- <property name="java.io.tmpdir" value="C:\WINDOWS\TEMP\"/>
- <property name="idea.version" value="2024.2.4"/>
- <property name="java.version" value="17.0.15"/>
- <property name="user.dir" value="E:\desktop\EX\PT_Sixth_Backend_MVN"/>
- <property name="os.arch" value="amd64"/>
- <property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
- <property name="sun.os.patch.level" value=""/>
- <property name="native.encoding" value="GBK"/>
- <property name="java.library.path" value="C:\Users\张家豪\.jdks\ms-17.0.15\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;E:\ProgramData\anaconda3\condabin;E:\Program Files\Python312\Scripts\;E:\Program Files\Python312\;C:\MinGW\bin;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;E:\MinGW\bin;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files\Java\jdk-19\bin;C:\Program Files\Java\jdk-19\jre\bin;E:\ComplierComplier\GnuWin32\bin;E:\ComplierComplier\MinGW\bin;E:\Program Files\nodejs\;E:\Program Files\nodejs\node_global\node_modules;E:\Program Files\Git\cmd;E:\Program Files\Redis\;E:\ProgramData\anaconda3;E:\ProgramData\anaconda3\Scripts;E:\ProgramData\anaconda3\Library\bin;E:\ProgramData\anaconda3\Library\mingw-w64\bin;E:\ProgramData\anaconda3\Library\usr\bin;E:\Program Files\apache-maven-3.9.9\bin;E:\docker\resources\bin;E:\Program Files\Git LFS;C:\MinGW\bin;C:\Users\张家豪\AppData\Local\Microsoft\WindowsApps;C:\texlive\2023\bin\windows;E:\Program Files\IDEA\IntelliJ IDEA Community Edition 2024.1\bin;;E:\Tomcat\apache-tomcat-10.1.20\bin\;E:\Program Files\Python工具\PyCharm Community Edition 2024.1.4\bin;;E:\Program Files\nodejs\node_global;C:\Users\张家豪\AppData\Local\Programs\Microsoft VS Code\bin;;."/>
- <property name="java.vm.info" value="mixed mode, sharing"/>
- <property name="java.vendor" value="Microsoft"/>
- <property name="java.vm.version" value="17.0.15+6-LTS"/>
- <property name="java.specification.maintenance.version" value="1"/>
- <property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
- <property name="java.class.version" value="61.0"/>
- </properties>
- <testcase name="contextLoads" classname="com.github.example.pt.ptApplicationTests" time="0.365"/>
+<?xml version="1.0" encoding="UTF-8"?>
+<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="com.github.example.pt.ptApplicationTests" time="12.046" tests="1" errors="0" skipped="0" failures="0">
+ <properties>
+ <property name="java.specification.version" value="17"/>
+ <property name="sun.cpu.isalist" value="amd64"/>
+ <property name="sun.jnu.encoding" value="GBK"/>
+ <property name="java.class.path" value="E:\desktop\EX\PT_Sixth_Backend_MVN\target\test-classes;E:\desktop\EX\PT_Sixth_Backend_MVN\target\classes;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-cache\3.0.2\spring-boot-starter-cache-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter\3.0.2\spring-boot-starter-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-logging\3.0.2\spring-boot-starter-logging-3.0.2.jar;C:\Users\张家豪\.m2\repository\ch\qos\logback\logback-classic\1.4.5\logback-classic-1.4.5.jar;C:\Users\张家豪\.m2\repository\ch\qos\logback\logback-core\1.4.5\logback-core-1.4.5.jar;C:\Users\张家豪\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.19.0\log4j-to-slf4j-2.19.0.jar;C:\Users\张家豪\.m2\repository\org\apache\logging\log4j\log4j-api\2.19.0\log4j-api-2.19.0.jar;C:\Users\张家豪\.m2\repository\org\slf4j\jul-to-slf4j\2.0.6\jul-to-slf4j-2.0.6.jar;C:\Users\张家豪\.m2\repository\org\yaml\snakeyaml\1.33\snakeyaml-1.33.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-context-support\6.0.4\spring-context-support-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-beans\6.0.4\spring-beans-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-context\6.0.4\spring-context-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-data-redis\3.0.2\spring-boot-starter-data-redis-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-redis\3.0.1\spring-data-redis-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-keyvalue\3.0.1\spring-data-keyvalue-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-oxm\6.0.4\spring-oxm-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-aop\6.0.4\spring-aop-6.0.4.jar;C:\Users\张家豪\.m2\repository\io\lettuce\lettuce-core\6.2.2.RELEASE\lettuce-core-6.2.2.RELEASE.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-common\4.1.87.Final\netty-common-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-handler\4.1.87.Final\netty-handler-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.87.Final\netty-transport-native-unix-common-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-transport\4.1.87.Final\netty-transport-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\projectreactor\reactor-core\3.5.2\reactor-core-3.5.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\3.0.2\spring-boot-starter-data-jpa-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-aop\3.0.2\spring-boot-starter-aop-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\aspectj\aspectjweaver\1.9.19\aspectjweaver-1.9.19.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\3.0.2\spring-boot-starter-jdbc-3.0.2.jar;C:\Users\张家豪\.m2\repository\com\zaxxer\HikariCP\5.0.1\HikariCP-5.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-jdbc\6.0.4\spring-jdbc-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\hibernate\orm\hibernate-core\6.1.6.Final\hibernate-core-6.1.6.Final.jar;C:\Users\张家豪\.m2\repository\jakarta\persistence\jakarta.persistence-api\3.1.0\jakarta.persistence-api-3.1.0.jar;C:\Users\张家豪\.m2\repository\jakarta\transaction\jakarta.transaction-api\2.0.1\jakarta.transaction-api-2.0.1.jar;C:\Users\张家豪\.m2\repository\org\jboss\logging\jboss-logging\3.5.0.Final\jboss-logging-3.5.0.Final.jar;C:\Users\张家豪\.m2\repository\org\hibernate\common\hibernate-commons-annotations\6.0.2.Final\hibernate-commons-annotations-6.0.2.Final.jar;C:\Users\张家豪\.m2\repository\org\jboss\jandex\2.4.2.Final\jandex-2.4.2.Final.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\张家豪\.m2\repository\net\bytebuddy\byte-buddy\1.12.22\byte-buddy-1.12.22.jar;C:\Users\张家豪\.m2\repository\org\glassfish\jaxb\jaxb-runtime\4.0.1\jaxb-runtime-4.0.1.jar;C:\Users\张家豪\.m2\repository\org\glassfish\jaxb\jaxb-core\4.0.1\jaxb-core-4.0.1.jar;C:\Users\张家豪\.m2\repository\org\glassfish\jaxb\txw2\4.0.1\txw2-4.0.1.jar;C:\Users\张家豪\.m2\repository\com\sun\istack\istack-commons-runtime\4.1.1\istack-commons-runtime-4.1.1.jar;C:\Users\张家豪\.m2\repository\jakarta\inject\jakarta.inject-api\2.0.0\jakarta.inject-api-2.0.0.jar;C:\Users\张家豪\.m2\repository\org\antlr\antlr4-runtime\4.10.1\antlr4-runtime-4.10.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-jpa\3.0.1\spring-data-jpa-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-commons\3.0.1\spring-data-commons-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-orm\6.0.4\spring-orm-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-aspects\6.0.4\spring-aspects-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-mail\3.0.2\spring-boot-starter-mail-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\eclipse\angus\jakarta.mail\1.0.0\jakarta.mail-1.0.0.jar;C:\Users\张家豪\.m2\repository\jakarta\activation\jakarta.activation-api\2.1.1\jakarta.activation-api-2.1.1.jar;C:\Users\张家豪\.m2\repository\org\eclipse\angus\angus-activation\1.0.0\angus-activation-1.0.0.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-quartz\3.0.2\spring-boot-starter-quartz-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-tx\6.0.4\spring-tx-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\quartz-scheduler\quartz\2.3.2\quartz-2.3.2.jar;C:\Users\张家豪\.m2\repository\com\mchange\mchange-commons-java\0.2.15\mchange-commons-java-0.2.15.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-validation\3.0.2\spring-boot-starter-validation-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\10.1.5\tomcat-embed-el-10.1.5.jar;C:\Users\张家豪\.m2\repository\org\hibernate\validator\hibernate-validator\8.0.0.Final\hibernate-validator-8.0.0.Final.jar;C:\Users\张家豪\.m2\repository\jakarta\validation\jakarta.validation-api\3.0.2\jakarta.validation-api-3.0.2.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-spring-boot3-starter\1.34.0\sa-token-spring-boot3-starter-1.34.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-jakarta-servlet\1.34.0\sa-token-jakarta-servlet-1.34.0.jar;C:\Users\张家豪\.m2\repository\jakarta\servlet\jakarta.servlet-api\6.0.0\jakarta.servlet-api-6.0.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-spring-boot-autoconfig\1.34.0\sa-token-spring-boot-autoconfig-1.34.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-dao-redis-jackson\1.34.0\sa-token-dao-redis-jackson-1.34.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-core\1.34.0\sa-token-core-1.34.0.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-web\3.0.2\spring-boot-starter-web-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-web\6.0.4\spring-web-6.0.4.jar;C:\Users\张家豪\.m2\repository\io\micrometer\micrometer-observation\1.10.3\micrometer-observation-1.10.3.jar;C:\Users\张家豪\.m2\repository\io\micrometer\micrometer-commons\1.10.3\micrometer-commons-1.10.3.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-webmvc\6.0.4\spring-webmvc-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-expression\6.0.4\spring-expression-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-json\3.0.2\spring-boot-starter-json-3.0.2.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.14.1\jackson-databind-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.14.1\jackson-datatype-jdk8-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.14.1\jackson-module-parameter-names-2.14.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\3.0.2\spring-boot-starter-tomcat-3.0.2.jar;C:\Users\张家豪\.m2\repository\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;C:\Users\张家豪\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\10.1.5\tomcat-embed-core-10.1.5.jar;C:\Users\张家豪\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.5\tomcat-embed-websocket-10.1.5.jar;C:\Users\张家豪\.m2\repository\commons-io\commons-io\2.11.0\commons-io-2.11.0.jar;C:\Users\张家豪\.m2\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;C:\Users\张家豪\.m2\repository\commons-validator\commons-validator\1.7\commons-validator-1.7.jar;C:\Users\张家豪\.m2\repository\commons-beanutils\commons-beanutils\1.9.4\commons-beanutils-1.9.4.jar;C:\Users\张家豪\.m2\repository\commons-digester\commons-digester\2.1\commons-digester-2.1.jar;C:\Users\张家豪\.m2\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;C:\Users\张家豪\.m2\repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-lang3\3.12.0\commons-lang3-3.12.0.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-text\1.10.0\commons-text-1.10.0.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-compress\1.22\commons-compress-1.22.jar;C:\Users\张家豪\.m2\repository\org\jetbrains\annotations\23.1.0\annotations-23.1.0.jar;C:\Users\张家豪\.m2\repository\com\google\guava\guava\31.1-jre\guava-31.1-jre.jar;C:\Users\张家豪\.m2\repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;C:\Users\张家豪\.m2\repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;C:\Users\张家豪\.m2\repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\checkerframework\checker-qual\3.12.0\checker-qual-3.12.0.jar;C:\Users\张家豪\.m2\repository\com\google\errorprone\error_prone_annotations\2.11.0\error_prone_annotations-2.11.0.jar;C:\Users\张家豪\.m2\repository\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar;C:\Users\张家豪\.m2\repository\at\favre\lib\bcrypt\0.9.0\bcrypt-0.9.0.jar;C:\Users\张家豪\.m2\repository\at\favre\lib\bytes\1.3.0\bytes-1.3.0.jar;C:\Users\张家豪\.m2\repository\com\konghq\unirest-java\3.14.1\unirest-java-3.14.1.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpclient\4.5.14\httpclient-4.5.14.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpcore\4.4.16\httpcore-4.4.16.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpmime\4.5.14\httpmime-4.5.14.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpcore-nio\4.4.16\httpcore-nio-4.4.16.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpasyncclient\4.1.5\httpasyncclient-4.1.5.jar;C:\Users\张家豪\.m2\repository\com\google\code\gson\gson\2.9.1\gson-2.9.1.jar;C:\Users\张家豪\.m2\repository\me\tongfei\progressbar\0.9.5\progressbar-0.9.5.jar;C:\Users\张家豪\.m2\repository\org\jline\jline\3.21.0\jline-3.21.0.jar;C:\Users\张家豪\.m2\repository\com\dampcake\bencode\1.4\bencode-1.4.jar;C:\Users\张家豪\.m2\repository\com\mysql\mysql-connector-j\8.0.32\mysql-connector-j-8.0.32.jar;C:\Users\张家豪\.m2\repository\com\h2database\h2\2.1.214\h2-2.1.214.jar;C:\Users\张家豪\.m2\repository\org\projectlombok\lombok\1.18.24\lombok-1.18.24.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-devtools\3.0.2\spring-boot-devtools-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot\3.0.2\spring-boot-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\3.0.2\spring-boot-autoconfigure-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-test\3.0.2\spring-boot-starter-test-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-test\3.0.2\spring-boot-test-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\3.0.2\spring-boot-test-autoconfigure-3.0.2.jar;C:\Users\张家豪\.m2\repository\com\jayway\jsonpath\json-path\2.7.0\json-path-2.7.0.jar;C:\Users\张家豪\.m2\repository\net\minidev\json-smart\2.4.8\json-smart-2.4.8.jar;C:\Users\张家豪\.m2\repository\net\minidev\accessors-smart\2.4.8\accessors-smart-2.4.8.jar;C:\Users\张家豪\.m2\repository\org\ow2\asm\asm\9.1\asm-9.1.jar;C:\Users\张家豪\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\4.0.0\jakarta.xml.bind-api-4.0.0.jar;C:\Users\张家豪\.m2\repository\org\assertj\assertj-core\3.23.1\assertj-core-3.23.1.jar;C:\Users\张家豪\.m2\repository\org\hamcrest\hamcrest\2.2\hamcrest-2.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter\5.9.2\junit-jupiter-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.9.2\junit-jupiter-api-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\张家豪\.m2\repository\org\junit\platform\junit-platform-commons\1.9.2\junit-platform-commons-1.9.2.jar;C:\Users\张家豪\.m2\repository\org\apiguardian\apiguardian-api\1.1.2\apiguardian-api-1.1.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.9.2\junit-jupiter-params-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.9.2\junit-jupiter-engine-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\junit\platform\junit-platform-engine\1.9.2\junit-platform-engine-1.9.2.jar;C:\Users\张家豪\.m2\repository\org\mockito\mockito-core\4.8.1\mockito-core-4.8.1.jar;C:\Users\张家豪\.m2\repository\net\bytebuddy\byte-buddy-agent\1.12.22\byte-buddy-agent-1.12.22.jar;C:\Users\张家豪\.m2\repository\org\objenesis\objenesis\3.2\objenesis-3.2.jar;C:\Users\张家豪\.m2\repository\org\mockito\mockito-junit-jupiter\4.8.1\mockito-junit-jupiter-4.8.1.jar;C:\Users\张家豪\.m2\repository\org\skyscreamer\jsonassert\1.5.1\jsonassert-1.5.1.jar;C:\Users\张家豪\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-core\6.0.4\spring-core-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-jcl\6.0.4\spring-jcl-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-test\6.0.4\spring-test-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\xmlunit\xmlunit-core\2.9.1\xmlunit-core-2.9.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.14.1\jackson-datatype-jsr310-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.14.1\jackson-annotations-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.14.1\jackson-core-2.14.1.jar;C:\Users\张家豪\.m2\repository\org\redisson\redisson-hibernate-6\3.19.3\redisson-hibernate-6-3.19.3.jar;C:\Users\张家豪\.m2\repository\org\redisson\redisson\3.19.3\redisson-3.19.3.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-codec\4.1.87.Final\netty-codec-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-buffer\4.1.87.Final\netty-buffer-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-resolver\4.1.87.Final\netty-resolver-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-resolver-dns\4.1.87.Final\netty-resolver-dns-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-codec-dns\4.1.87.Final\netty-codec-dns-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\javax\cache\cache-api\1.1.1\cache-api-1.1.1.jar;C:\Users\张家豪\.m2\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;C:\Users\张家豪\.m2\repository\io\reactivex\rxjava3\rxjava\3.1.6\rxjava-3.1.6.jar;C:\Users\张家豪\.m2\repository\org\jboss\marshalling\jboss-marshalling\2.0.11.Final\jboss-marshalling-2.0.11.Final.jar;C:\Users\张家豪\.m2\repository\org\jboss\marshalling\jboss-marshalling-river\2.0.11.Final\jboss-marshalling-river-2.0.11.Final.jar;C:\Users\张家豪\.m2\repository\com\esotericsoftware\kryo\5.4.0\kryo-5.4.0.jar;C:\Users\张家豪\.m2\repository\com\esotericsoftware\reflectasm\1.11.9\reflectasm-1.11.9.jar;C:\Users\张家豪\.m2\repository\com\esotericsoftware\minlog\1.3.1\minlog-1.3.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.14.1\jackson-dataformat-yaml-2.14.1.jar;C:\Users\张家豪\.m2\repository\org\jodd\jodd-bean\5.1.6\jodd-bean-5.1.6.jar;C:\Users\张家豪\.m2\repository\org\jodd\jodd-core\5.1.6\jodd-core-5.1.6.jar;C:\Users\张家豪\.m2\repository\com\googlecode\owasp-java-html-sanitizer\owasp-java-html-sanitizer\20220608.1\owasp-java-html-sanitizer-20220608.1.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-pool2\2.11.1\commons-pool2-2.11.1.jar;C:\Users\张家豪\.m2\repository\com\rometools\rome\1.18.0\rome-1.18.0.jar;C:\Users\张家豪\.m2\repository\com\rometools\rome-utils\1.18.0\rome-utils-1.18.0.jar;C:\Users\张家豪\.m2\repository\org\jdom\jdom2\2.0.6.1\jdom2-2.0.6.1.jar;C:\Users\张家豪\.m2\repository\org\slf4j\slf4j-api\2.0.6\slf4j-api-2.0.6.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-starter-redis\2.7.3\jetcache-starter-redis-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-autoconfigure\2.7.3\jetcache-autoconfigure-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-anno\2.7.3\jetcache-anno-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-core\2.7.3\jetcache-core-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-anno-api\2.7.3\jetcache-anno-api-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alibaba\fastjson2\fastjson2\2.0.21\fastjson2-2.0.21.jar;C:\Users\张家豪\.m2\repository\com\github\ben-manes\caffeine\caffeine\3.1.2\caffeine-3.1.2.jar;C:\Users\张家豪\.m2\repository\javax\annotation\javax.annotation-api\1.3.1\javax.annotation-api-1.3.1.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-redis\2.7.3\jetcache-redis-2.7.3.jar;C:\Users\张家豪\.m2\repository\redis\clients\jedis\4.3.1\jedis-4.3.1.jar;C:\Users\张家豪\.m2\repository\org\json\json\20220320\json-20220320.jar;C:\Users\张家豪\.m2\repository\org\greenrobot\eventbus-java\3.3.1\eventbus-java-3.3.1.jar;"/>
+ <property name="java.vm.vendor" value="Microsoft"/>
+ <property name="sun.arch.data.model" value="64"/>
+ <property name="user.variant" value=""/>
+ <property name="java.vendor.url" value="https://www.microsoft.com"/>
+ <property name="user.timezone" value="Asia/Shanghai"/>
+ <property name="os.name" value="Windows 11"/>
+ <property name="java.vm.specification.version" value="17"/>
+ <property name="sun.java.launcher" value="SUN_STANDARD"/>
+ <property name="user.country" value="CN"/>
+ <property name="sun.boot.library.path" value="C:\Users\张家豪\.jdks\ms-17.0.15\bin"/>
+ <property name="sun.java.command" value="C:\WINDOWS\TEMP\surefire4451744251208519186\surefirebooter15867557814126146353.jar C:\Windows\Temp\surefire4451744251208519186 2025-06-04T22-30-38_359-jvmRun1 surefire1302598587474915774tmp surefire_011250240831511699183tmp"/>
+ <property name="jdk.debug" value="release"/>
+ <property name="surefire.test.class.path" value="E:\desktop\EX\PT_Sixth_Backend_MVN\target\test-classes;E:\desktop\EX\PT_Sixth_Backend_MVN\target\classes;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-cache\3.0.2\spring-boot-starter-cache-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter\3.0.2\spring-boot-starter-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-logging\3.0.2\spring-boot-starter-logging-3.0.2.jar;C:\Users\张家豪\.m2\repository\ch\qos\logback\logback-classic\1.4.5\logback-classic-1.4.5.jar;C:\Users\张家豪\.m2\repository\ch\qos\logback\logback-core\1.4.5\logback-core-1.4.5.jar;C:\Users\张家豪\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.19.0\log4j-to-slf4j-2.19.0.jar;C:\Users\张家豪\.m2\repository\org\apache\logging\log4j\log4j-api\2.19.0\log4j-api-2.19.0.jar;C:\Users\张家豪\.m2\repository\org\slf4j\jul-to-slf4j\2.0.6\jul-to-slf4j-2.0.6.jar;C:\Users\张家豪\.m2\repository\org\yaml\snakeyaml\1.33\snakeyaml-1.33.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-context-support\6.0.4\spring-context-support-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-beans\6.0.4\spring-beans-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-context\6.0.4\spring-context-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-data-redis\3.0.2\spring-boot-starter-data-redis-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-redis\3.0.1\spring-data-redis-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-keyvalue\3.0.1\spring-data-keyvalue-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-oxm\6.0.4\spring-oxm-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-aop\6.0.4\spring-aop-6.0.4.jar;C:\Users\张家豪\.m2\repository\io\lettuce\lettuce-core\6.2.2.RELEASE\lettuce-core-6.2.2.RELEASE.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-common\4.1.87.Final\netty-common-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-handler\4.1.87.Final\netty-handler-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.87.Final\netty-transport-native-unix-common-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-transport\4.1.87.Final\netty-transport-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\projectreactor\reactor-core\3.5.2\reactor-core-3.5.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\3.0.2\spring-boot-starter-data-jpa-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-aop\3.0.2\spring-boot-starter-aop-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\aspectj\aspectjweaver\1.9.19\aspectjweaver-1.9.19.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\3.0.2\spring-boot-starter-jdbc-3.0.2.jar;C:\Users\张家豪\.m2\repository\com\zaxxer\HikariCP\5.0.1\HikariCP-5.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-jdbc\6.0.4\spring-jdbc-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\hibernate\orm\hibernate-core\6.1.6.Final\hibernate-core-6.1.6.Final.jar;C:\Users\张家豪\.m2\repository\jakarta\persistence\jakarta.persistence-api\3.1.0\jakarta.persistence-api-3.1.0.jar;C:\Users\张家豪\.m2\repository\jakarta\transaction\jakarta.transaction-api\2.0.1\jakarta.transaction-api-2.0.1.jar;C:\Users\张家豪\.m2\repository\org\jboss\logging\jboss-logging\3.5.0.Final\jboss-logging-3.5.0.Final.jar;C:\Users\张家豪\.m2\repository\org\hibernate\common\hibernate-commons-annotations\6.0.2.Final\hibernate-commons-annotations-6.0.2.Final.jar;C:\Users\张家豪\.m2\repository\org\jboss\jandex\2.4.2.Final\jandex-2.4.2.Final.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\张家豪\.m2\repository\net\bytebuddy\byte-buddy\1.12.22\byte-buddy-1.12.22.jar;C:\Users\张家豪\.m2\repository\org\glassfish\jaxb\jaxb-runtime\4.0.1\jaxb-runtime-4.0.1.jar;C:\Users\张家豪\.m2\repository\org\glassfish\jaxb\jaxb-core\4.0.1\jaxb-core-4.0.1.jar;C:\Users\张家豪\.m2\repository\org\glassfish\jaxb\txw2\4.0.1\txw2-4.0.1.jar;C:\Users\张家豪\.m2\repository\com\sun\istack\istack-commons-runtime\4.1.1\istack-commons-runtime-4.1.1.jar;C:\Users\张家豪\.m2\repository\jakarta\inject\jakarta.inject-api\2.0.0\jakarta.inject-api-2.0.0.jar;C:\Users\张家豪\.m2\repository\org\antlr\antlr4-runtime\4.10.1\antlr4-runtime-4.10.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-jpa\3.0.1\spring-data-jpa-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\data\spring-data-commons\3.0.1\spring-data-commons-3.0.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-orm\6.0.4\spring-orm-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-aspects\6.0.4\spring-aspects-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-mail\3.0.2\spring-boot-starter-mail-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\eclipse\angus\jakarta.mail\1.0.0\jakarta.mail-1.0.0.jar;C:\Users\张家豪\.m2\repository\jakarta\activation\jakarta.activation-api\2.1.1\jakarta.activation-api-2.1.1.jar;C:\Users\张家豪\.m2\repository\org\eclipse\angus\angus-activation\1.0.0\angus-activation-1.0.0.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-quartz\3.0.2\spring-boot-starter-quartz-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-tx\6.0.4\spring-tx-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\quartz-scheduler\quartz\2.3.2\quartz-2.3.2.jar;C:\Users\张家豪\.m2\repository\com\mchange\mchange-commons-java\0.2.15\mchange-commons-java-0.2.15.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-validation\3.0.2\spring-boot-starter-validation-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\10.1.5\tomcat-embed-el-10.1.5.jar;C:\Users\张家豪\.m2\repository\org\hibernate\validator\hibernate-validator\8.0.0.Final\hibernate-validator-8.0.0.Final.jar;C:\Users\张家豪\.m2\repository\jakarta\validation\jakarta.validation-api\3.0.2\jakarta.validation-api-3.0.2.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-spring-boot3-starter\1.34.0\sa-token-spring-boot3-starter-1.34.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-jakarta-servlet\1.34.0\sa-token-jakarta-servlet-1.34.0.jar;C:\Users\张家豪\.m2\repository\jakarta\servlet\jakarta.servlet-api\6.0.0\jakarta.servlet-api-6.0.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-spring-boot-autoconfig\1.34.0\sa-token-spring-boot-autoconfig-1.34.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-dao-redis-jackson\1.34.0\sa-token-dao-redis-jackson-1.34.0.jar;C:\Users\张家豪\.m2\repository\cn\dev33\sa-token-core\1.34.0\sa-token-core-1.34.0.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-web\3.0.2\spring-boot-starter-web-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-web\6.0.4\spring-web-6.0.4.jar;C:\Users\张家豪\.m2\repository\io\micrometer\micrometer-observation\1.10.3\micrometer-observation-1.10.3.jar;C:\Users\张家豪\.m2\repository\io\micrometer\micrometer-commons\1.10.3\micrometer-commons-1.10.3.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-webmvc\6.0.4\spring-webmvc-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-expression\6.0.4\spring-expression-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-json\3.0.2\spring-boot-starter-json-3.0.2.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.14.1\jackson-databind-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.14.1\jackson-datatype-jdk8-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.14.1\jackson-module-parameter-names-2.14.1.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\3.0.2\spring-boot-starter-tomcat-3.0.2.jar;C:\Users\张家豪\.m2\repository\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;C:\Users\张家豪\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\10.1.5\tomcat-embed-core-10.1.5.jar;C:\Users\张家豪\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.5\tomcat-embed-websocket-10.1.5.jar;C:\Users\张家豪\.m2\repository\commons-io\commons-io\2.11.0\commons-io-2.11.0.jar;C:\Users\张家豪\.m2\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;C:\Users\张家豪\.m2\repository\commons-validator\commons-validator\1.7\commons-validator-1.7.jar;C:\Users\张家豪\.m2\repository\commons-beanutils\commons-beanutils\1.9.4\commons-beanutils-1.9.4.jar;C:\Users\张家豪\.m2\repository\commons-digester\commons-digester\2.1\commons-digester-2.1.jar;C:\Users\张家豪\.m2\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;C:\Users\张家豪\.m2\repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-lang3\3.12.0\commons-lang3-3.12.0.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-text\1.10.0\commons-text-1.10.0.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-compress\1.22\commons-compress-1.22.jar;C:\Users\张家豪\.m2\repository\org\jetbrains\annotations\23.1.0\annotations-23.1.0.jar;C:\Users\张家豪\.m2\repository\com\google\guava\guava\31.1-jre\guava-31.1-jre.jar;C:\Users\张家豪\.m2\repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;C:\Users\张家豪\.m2\repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;C:\Users\张家豪\.m2\repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\checkerframework\checker-qual\3.12.0\checker-qual-3.12.0.jar;C:\Users\张家豪\.m2\repository\com\google\errorprone\error_prone_annotations\2.11.0\error_prone_annotations-2.11.0.jar;C:\Users\张家豪\.m2\repository\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar;C:\Users\张家豪\.m2\repository\at\favre\lib\bcrypt\0.9.0\bcrypt-0.9.0.jar;C:\Users\张家豪\.m2\repository\at\favre\lib\bytes\1.3.0\bytes-1.3.0.jar;C:\Users\张家豪\.m2\repository\com\konghq\unirest-java\3.14.1\unirest-java-3.14.1.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpclient\4.5.14\httpclient-4.5.14.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpcore\4.4.16\httpcore-4.4.16.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpmime\4.5.14\httpmime-4.5.14.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpcore-nio\4.4.16\httpcore-nio-4.4.16.jar;C:\Users\张家豪\.m2\repository\org\apache\httpcomponents\httpasyncclient\4.1.5\httpasyncclient-4.1.5.jar;C:\Users\张家豪\.m2\repository\com\google\code\gson\gson\2.9.1\gson-2.9.1.jar;C:\Users\张家豪\.m2\repository\me\tongfei\progressbar\0.9.5\progressbar-0.9.5.jar;C:\Users\张家豪\.m2\repository\org\jline\jline\3.21.0\jline-3.21.0.jar;C:\Users\张家豪\.m2\repository\com\dampcake\bencode\1.4\bencode-1.4.jar;C:\Users\张家豪\.m2\repository\com\mysql\mysql-connector-j\8.0.32\mysql-connector-j-8.0.32.jar;C:\Users\张家豪\.m2\repository\com\h2database\h2\2.1.214\h2-2.1.214.jar;C:\Users\张家豪\.m2\repository\org\projectlombok\lombok\1.18.24\lombok-1.18.24.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-devtools\3.0.2\spring-boot-devtools-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot\3.0.2\spring-boot-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\3.0.2\spring-boot-autoconfigure-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-starter-test\3.0.2\spring-boot-starter-test-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-test\3.0.2\spring-boot-test-3.0.2.jar;C:\Users\张家豪\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\3.0.2\spring-boot-test-autoconfigure-3.0.2.jar;C:\Users\张家豪\.m2\repository\com\jayway\jsonpath\json-path\2.7.0\json-path-2.7.0.jar;C:\Users\张家豪\.m2\repository\net\minidev\json-smart\2.4.8\json-smart-2.4.8.jar;C:\Users\张家豪\.m2\repository\net\minidev\accessors-smart\2.4.8\accessors-smart-2.4.8.jar;C:\Users\张家豪\.m2\repository\org\ow2\asm\asm\9.1\asm-9.1.jar;C:\Users\张家豪\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\4.0.0\jakarta.xml.bind-api-4.0.0.jar;C:\Users\张家豪\.m2\repository\org\assertj\assertj-core\3.23.1\assertj-core-3.23.1.jar;C:\Users\张家豪\.m2\repository\org\hamcrest\hamcrest\2.2\hamcrest-2.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter\5.9.2\junit-jupiter-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.9.2\junit-jupiter-api-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\张家豪\.m2\repository\org\junit\platform\junit-platform-commons\1.9.2\junit-platform-commons-1.9.2.jar;C:\Users\张家豪\.m2\repository\org\apiguardian\apiguardian-api\1.1.2\apiguardian-api-1.1.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.9.2\junit-jupiter-params-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.9.2\junit-jupiter-engine-5.9.2.jar;C:\Users\张家豪\.m2\repository\org\junit\platform\junit-platform-engine\1.9.2\junit-platform-engine-1.9.2.jar;C:\Users\张家豪\.m2\repository\org\mockito\mockito-core\4.8.1\mockito-core-4.8.1.jar;C:\Users\张家豪\.m2\repository\net\bytebuddy\byte-buddy-agent\1.12.22\byte-buddy-agent-1.12.22.jar;C:\Users\张家豪\.m2\repository\org\objenesis\objenesis\3.2\objenesis-3.2.jar;C:\Users\张家豪\.m2\repository\org\mockito\mockito-junit-jupiter\4.8.1\mockito-junit-jupiter-4.8.1.jar;C:\Users\张家豪\.m2\repository\org\skyscreamer\jsonassert\1.5.1\jsonassert-1.5.1.jar;C:\Users\张家豪\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-core\6.0.4\spring-core-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-jcl\6.0.4\spring-jcl-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\springframework\spring-test\6.0.4\spring-test-6.0.4.jar;C:\Users\张家豪\.m2\repository\org\xmlunit\xmlunit-core\2.9.1\xmlunit-core-2.9.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.14.1\jackson-datatype-jsr310-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.14.1\jackson-annotations-2.14.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.14.1\jackson-core-2.14.1.jar;C:\Users\张家豪\.m2\repository\org\redisson\redisson-hibernate-6\3.19.3\redisson-hibernate-6-3.19.3.jar;C:\Users\张家豪\.m2\repository\org\redisson\redisson\3.19.3\redisson-3.19.3.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-codec\4.1.87.Final\netty-codec-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-buffer\4.1.87.Final\netty-buffer-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-resolver\4.1.87.Final\netty-resolver-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-resolver-dns\4.1.87.Final\netty-resolver-dns-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\io\netty\netty-codec-dns\4.1.87.Final\netty-codec-dns-4.1.87.Final.jar;C:\Users\张家豪\.m2\repository\javax\cache\cache-api\1.1.1\cache-api-1.1.1.jar;C:\Users\张家豪\.m2\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;C:\Users\张家豪\.m2\repository\io\reactivex\rxjava3\rxjava\3.1.6\rxjava-3.1.6.jar;C:\Users\张家豪\.m2\repository\org\jboss\marshalling\jboss-marshalling\2.0.11.Final\jboss-marshalling-2.0.11.Final.jar;C:\Users\张家豪\.m2\repository\org\jboss\marshalling\jboss-marshalling-river\2.0.11.Final\jboss-marshalling-river-2.0.11.Final.jar;C:\Users\张家豪\.m2\repository\com\esotericsoftware\kryo\5.4.0\kryo-5.4.0.jar;C:\Users\张家豪\.m2\repository\com\esotericsoftware\reflectasm\1.11.9\reflectasm-1.11.9.jar;C:\Users\张家豪\.m2\repository\com\esotericsoftware\minlog\1.3.1\minlog-1.3.1.jar;C:\Users\张家豪\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.14.1\jackson-dataformat-yaml-2.14.1.jar;C:\Users\张家豪\.m2\repository\org\jodd\jodd-bean\5.1.6\jodd-bean-5.1.6.jar;C:\Users\张家豪\.m2\repository\org\jodd\jodd-core\5.1.6\jodd-core-5.1.6.jar;C:\Users\张家豪\.m2\repository\com\googlecode\owasp-java-html-sanitizer\owasp-java-html-sanitizer\20220608.1\owasp-java-html-sanitizer-20220608.1.jar;C:\Users\张家豪\.m2\repository\org\apache\commons\commons-pool2\2.11.1\commons-pool2-2.11.1.jar;C:\Users\张家豪\.m2\repository\com\rometools\rome\1.18.0\rome-1.18.0.jar;C:\Users\张家豪\.m2\repository\com\rometools\rome-utils\1.18.0\rome-utils-1.18.0.jar;C:\Users\张家豪\.m2\repository\org\jdom\jdom2\2.0.6.1\jdom2-2.0.6.1.jar;C:\Users\张家豪\.m2\repository\org\slf4j\slf4j-api\2.0.6\slf4j-api-2.0.6.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-starter-redis\2.7.3\jetcache-starter-redis-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-autoconfigure\2.7.3\jetcache-autoconfigure-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-anno\2.7.3\jetcache-anno-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-core\2.7.3\jetcache-core-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-anno-api\2.7.3\jetcache-anno-api-2.7.3.jar;C:\Users\张家豪\.m2\repository\com\alibaba\fastjson2\fastjson2\2.0.21\fastjson2-2.0.21.jar;C:\Users\张家豪\.m2\repository\com\github\ben-manes\caffeine\caffeine\3.1.2\caffeine-3.1.2.jar;C:\Users\张家豪\.m2\repository\javax\annotation\javax.annotation-api\1.3.1\javax.annotation-api-1.3.1.jar;C:\Users\张家豪\.m2\repository\com\alicp\jetcache\jetcache-redis\2.7.3\jetcache-redis-2.7.3.jar;C:\Users\张家豪\.m2\repository\redis\clients\jedis\4.3.1\jedis-4.3.1.jar;C:\Users\张家豪\.m2\repository\org\json\json\20220320\json-20220320.jar;C:\Users\张家豪\.m2\repository\org\greenrobot\eventbus-java\3.3.1\eventbus-java-3.3.1.jar;"/>
+ <property name="sun.cpu.endian" value="little"/>
+ <property name="user.home" value="C:\Users\张家豪"/>
+ <property name="user.language" value="zh"/>
+ <property name="java.specification.vendor" value="Oracle Corporation"/>
+ <property name="java.version.date" value="2025-04-15"/>
+ <property name="java.home" value="C:\Users\张家豪\.jdks\ms-17.0.15"/>
+ <property name="file.separator" value="\"/>
+ <property name="basedir" value="E:\desktop\EX\PT_Sixth_Backend_MVN"/>
+ <property name="java.vm.compressedOopsMode" value="Zero based"/>
+ <property name="line.separator" value=" "/>
+ <property name="java.vm.specification.vendor" value="Oracle Corporation"/>
+ <property name="java.specification.name" value="Java Platform API Specification"/>
+ <property name="surefire.real.class.path" value="C:\WINDOWS\TEMP\surefire4451744251208519186\surefirebooter15867557814126146353.jar"/>
+ <property name="user.script" value=""/>
+ <property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
+ <property name="java.runtime.version" value="17.0.15+6-LTS"/>
+ <property name="user.name" value="张家豪"/>
+ <property name="path.separator" value=";"/>
+ <property name="os.version" value="10.0"/>
+ <property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
+ <property name="file.encoding" value="GBK"/>
+ <property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>
+ <property name="java.vendor.version" value="Microsoft-11369865"/>
+ <property name="localRepository" value="C:\Users\张家豪\.m2\repository"/>
+ <property name="java.vendor.url.bug" value="https://github.com/microsoft/openjdk/issues"/>
+ <property name="java.io.tmpdir" value="C:\WINDOWS\TEMP\"/>
+ <property name="idea.version" value="2024.2.4"/>
+ <property name="java.version" value="17.0.15"/>
+ <property name="user.dir" value="E:\desktop\EX\PT_Sixth_Backend_MVN"/>
+ <property name="os.arch" value="amd64"/>
+ <property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
+ <property name="sun.os.patch.level" value=""/>
+ <property name="native.encoding" value="GBK"/>
+ <property name="java.library.path" value="C:\Users\张家豪\.jdks\ms-17.0.15\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;E:\ProgramData\anaconda3\condabin;E:\Program Files\Python312\Scripts\;E:\Program Files\Python312\;C:\MinGW\bin;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;E:\MinGW\bin;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files\Java\jdk-19\bin;C:\Program Files\Java\jdk-19\jre\bin;E:\ComplierComplier\GnuWin32\bin;E:\ComplierComplier\MinGW\bin;E:\Program Files\nodejs\;E:\Program Files\nodejs\node_global\node_modules;E:\Program Files\Git\cmd;E:\Program Files\Redis\;E:\ProgramData\anaconda3;E:\ProgramData\anaconda3\Scripts;E:\ProgramData\anaconda3\Library\bin;E:\ProgramData\anaconda3\Library\mingw-w64\bin;E:\ProgramData\anaconda3\Library\usr\bin;E:\Program Files\apache-maven-3.9.9\bin;E:\docker\resources\bin;E:\Program Files\Git LFS;C:\MinGW\bin;C:\Users\张家豪\AppData\Local\Microsoft\WindowsApps;C:\texlive\2023\bin\windows;E:\Program Files\IDEA\IntelliJ IDEA Community Edition 2024.1\bin;;E:\Tomcat\apache-tomcat-10.1.20\bin\;E:\Program Files\Python工具\PyCharm Community Edition 2024.1.4\bin;;E:\Program Files\nodejs\node_global;C:\Users\张家豪\AppData\Local\Programs\Microsoft VS Code\bin;;."/>
+ <property name="java.vm.info" value="mixed mode, sharing"/>
+ <property name="java.vendor" value="Microsoft"/>
+ <property name="java.vm.version" value="17.0.15+6-LTS"/>
+ <property name="java.specification.maintenance.version" value="1"/>
+ <property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
+ <property name="java.class.version" value="61.0"/>
+ </properties>
+ <testcase name="contextLoads" classname="com.github.example.pt.ptApplicationTests" time="0.365"/>
</testsuite>
\ No newline at end of file
diff --git a/target/surefire-reports/com.github.example.pt.ptApplicationTests.txt b/target/surefire-reports/com.github.example.pt.ptApplicationTests.txt
index ffad9d6..99c3594 100644
--- a/target/surefire-reports/com.github.example.pt.ptApplicationTests.txt
+++ b/target/surefire-reports/com.github.example.pt.ptApplicationTests.txt
@@ -1,4 +1,4 @@
--------------------------------------------------------------------------------
-Test set: com.github.example.pt.ptApplicationTests
--------------------------------------------------------------------------------
-Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 12.046 s - in com.github.example.pt.ptApplicationTests
+-------------------------------------------------------------------------------
+Test set: com.github.example.pt.ptApplicationTests
+-------------------------------------------------------------------------------
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 12.046 s - in com.github.example.pt.ptApplicationTests