Backend update on Torrent upload with unit test complete

Change-Id: Ie8a90c82e414df32d079524d3ff3035b823b69c3
diff --git a/backend/demo/compose.yaml b/backend/demo/compose.yaml
index 61d6b9d..4d288a2 100644
--- a/backend/demo/compose.yaml
+++ b/backend/demo/compose.yaml
@@ -1,29 +1,74 @@
 
 services:
+  # 数据库服务
   mysql:
-    image: mysql:latest
+    image: mysql:8.0 # 建议使用具体的版本号,而不是 latest
+    container_name: mysql_db # 给容器一个易于识别的名称
     environment:
-      - MYSQL_DATABASE=mydatabase
-      - MYSQL_USER=myuser
-      - MYSQL_PASSWORD=secret
-      - MYSQL_ROOT_PASSWORD=verysecret
+      MYSQL_DATABASE: mydatabase
+      MYSQL_USER: myuser
+      MYSQL_PASSWORD: secret
+      MYSQL_ROOT_PASSWORD: verysecret
     ports:
-      - "3306:3306"
+      - "3306:3306" # 映射数据库端口,方便本地工具连接(可选,仅测试容器连接DB时可省略)
     volumes:
-      - mysql-data:/var/lib/mysql
+      - mysql-data:/var/lib/mysql # 持久化数据库数据
+    # 添加健康检查,确保数据库服务真正可用
+    healthcheck:
+      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u$$MYSQL_USER", "-p$$MYSQL_PASSWORD"]
+      interval: 10s # 每 10 秒检查一次
+      timeout: 5s # 检查超时时间
+      retries: 5 # 重试次数
+      start_period: 30s # 在此期间不计入重试失败次数,给数据库启动时间
 
+  # 应用服务(使用 Dockerfile 的 runner 阶段)
   app:
     build:
-      context: .
-      dockerfile: Dockerfile
+      context: . # Dockerfile 所在的上下文路径
+      dockerfile: Dockerfile # Dockerfile 文件名
+      target: runner # 指定构建 Dockerfile 中的 runner 阶段
+    container_name: spring_app
     ports:
-      - "8080:8080"
+      - "8080:8080" # 映射应用端口
     environment:
-      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mydatabase?serverTimezone=Asia/Shanghai
+      # 应用连接数据库的配置,使用数据库服务的名称作为主机名
+      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mydatabase?serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=TRUE&useSSL=FALSE&allowPublicKeyRetrieval=TRUE
       SPRING_DATASOURCE_USERNAME: myuser
       SPRING_DATASOURCE_PASSWORD: secret
+      # 其他 Spring Boot 配置...
     depends_on:
-      - mysql
+      mysql:
+        condition: service_healthy # 确保数据库服务处于健康状态才启动应用
 
+  # 测试服务(使用 Dockerfile 的 tester 阶段)
+  # 这个服务用于运行和调试需要连接数据库的测试
+  tester:
+    build:
+      context: . # Dockerfile 所在的上下文路径
+      dockerfile: Dockerfile # Dockerfile 文件名
+      target: tester # 指定构建 Dockerfile 中的 tester 阶段
+    container_name: tester
+    # 暴露调试端口,映射到主机端口,用于远程调试测试过程
+    ports:
+      - "5005:5005"
+    # 依赖于数据库服务,并等待其健康检查通过
+    depends_on:
+      mysql:
+        condition: service_healthy # 确保数据库服务处于健康状态才启动测试容器
+    environment:
+      # 测试环境连接数据库的配置,使用数据库服务的名称作为主机名
+      # 这些环境变量会覆盖 application-test.properties 中的相同配置
+      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mydatabase?serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=TRUE&useSSL=FALSE
+      SPRING_DATASOURCE_USERNAME: myuser
+      SPRING_DATASOURCE_PASSWORD: secret
+      # 设置 Maven 运行时的额外 JVM 参数,用于开启远程调试
+      MAVEN_OPTS: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"
+    # 默认命令:保持容器运行,方便手动进入容器执行测试和调试
+    # 如果您希望容器启动后自动运行测试,可以修改此命令为 ["mvn", "test"]
+    command: tail -f /dev/null
+
+
+# 定义数据卷用于持久化数据库数据
 volumes:
   mysql-data:
+