测试本地

Change-Id: Ib3a541fac7efd46cccd608c351fcd5f3236f475f
diff --git a/src/main/java/com/example/g8backend/controller/AuthController.java b/src/main/java/com/example/g8backend/controller/AuthController.java
index 1fdf906..b68eff8 100644
--- a/src/main/java/com/example/g8backend/controller/AuthController.java
+++ b/src/main/java/com/example/g8backend/controller/AuthController.java
@@ -61,9 +61,9 @@
             return ApiResponse.error(400, "用户名已存在");
         }
 
-        if (!redisTemplate.hasKey(registerDTO.getInvitationCode())) {
-            return ApiResponse.error(400, "邀请码错误");
-        }
+//        if (!redisTemplate.hasKey(registerDTO.getInvitationCode())) {
+//            return ApiResponse.error(400, "邀请码错误");
+//        }
 
         Object cachedCode = redisTemplate.opsForValue().get(registerDTO.getEmail());
         if (!registerDTO.getVerificationCode().equals(cachedCode)) {
diff --git a/src/main/java/com/example/g8backend/controller/TrackerController.java b/src/main/java/com/example/g8backend/controller/TrackerController.java
index 4e26abb..8776e36 100644
--- a/src/main/java/com/example/g8backend/controller/TrackerController.java
+++ b/src/main/java/com/example/g8backend/controller/TrackerController.java
@@ -3,6 +3,8 @@
 import com.example.g8backend.dto.AnnounceRequestDTO;
 import com.example.g8backend.dto.AnnounceResponseDTO;
 import jakarta.servlet.http.HttpServletRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
@@ -28,6 +30,8 @@
             @RequestParam(value = "compact", required = false) Integer compact,
             @PathVariable String passkey) {
 
+        Logger logger = LoggerFactory.getLogger(this.getClass());
+
         AnnounceRequestDTO requestDTO = new AnnounceRequestDTO();
         requestDTO.setPasskey(passkey);
         requestDTO.setInfoHash(infoHash);
@@ -39,6 +43,8 @@
         requestDTO.setLeft(left);
         requestDTO.setCompact(compact);
 
+        logger.info(requestDTO.toString());
+
         String ipAddress = request.getHeader("X-Forwarded-For");
         if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
             ipAddress = request.getHeader("Proxy-Client-IP");
diff --git a/src/main/java/com/example/g8backend/entity/User.java b/src/main/java/com/example/g8backend/entity/User.java
index aea6335..d32cab9 100644
--- a/src/main/java/com/example/g8backend/entity/User.java
+++ b/src/main/java/com/example/g8backend/entity/User.java
@@ -25,6 +25,7 @@
     private Integer signinCount;
     private LocalDate lastSigninDate;
     private String role;
+//    private String avatarUrl; // 头像 URL 或文件名
     @TableField("is_banned")
     private Boolean isBanned = false;
 
diff --git a/src/main/java/com/example/g8backend/service/impl/TorrentRecommendationServiceImpl.java b/src/main/java/com/example/g8backend/service/impl/TorrentRecommendationServiceImpl.java
index f93c2e4..7adc4c0 100644
--- a/src/main/java/com/example/g8backend/service/impl/TorrentRecommendationServiceImpl.java
+++ b/src/main/java/com/example/g8backend/service/impl/TorrentRecommendationServiceImpl.java
@@ -102,7 +102,9 @@
             int israre = (i < limit) ? 1 : 0;
 
             // 直接调用mapper更新对应torrent的israre字段
-            torrentMapper.updateIsRareByInfoHash(dto.getInfoHash(), israre);
+            int rows = torrentMapper.updateIsRareByInfoHash(dto.getInfoHash(), israre);
+            System.out.println("更新infoHash=" + dto.getInfoHash() + " 的is_rare=" + israre + ",受影响行数=" + rows);
+
         }
     }
 }
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index dbde0cf..899d736 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -9,8 +9,8 @@
 
 mybatis-plus.mapper-locations=classpath*:/mapper/**/*.xml
 
-#spring.data.redis.host = 127.0.0.1
-spring.data.redis.host = redis
+spring.data.redis.host = 127.0.0.1
+#spring.data.redis.host = redis
 spring.data.redis.port = 6379
 
 spring.mail.host=smtp.qq.com
diff --git a/src/main/resources/mapper/PeerMapper.xml b/src/main/resources/mapper/PeerMapper.xml
index 4c90eae..27814fd 100644
--- a/src/main/resources/mapper/PeerMapper.xml
+++ b/src/main/resources/mapper/PeerMapper.xml
@@ -2,33 +2,41 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.example.g8backend.mapper.PeerMapper">
-    <select id="getPeerByPK">
+
+    <select id="getPeerByPK" parameterType="map" resultType="com.example.g8backend.entity.Peer">
         SELECT * FROM peers
         WHERE peer_id = #{peerId} and info_hash = #{infoHash} and passkey = #{passkey}
     </select>
-    <select id="getPeerByInfoHashAndPeerId">
+
+    <select id="getPeerByInfoHashAndPeerId" parameterType="map" resultType="com.example.g8backend.entity.Peer">
         SELECT * FROM peers
         WHERE info_hash = #{infoHash} and peer_id = #{peerId}
     </select>
+
     <select id="selectAllInfoHashesWithPeers" resultType="String">
         SELECT DISTINCT info_hash FROM peers
     </select>
 
     <select id="countRecentActivity" resultType="Long" parameterType="String">
-        SELECT COUNT(*) FROM peers
+        SELECT COUNT(*) FROM torrents
         WHERE info_hash = #{infoHash}
-        AND last_activity_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
+        AND upload_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
     </select>
+
+
     <select id="selectByInfoHashList" parameterType="list" resultType="com.example.g8backend.entity.Torrent">
         SELECT * FROM torrents
         WHERE info_hash IN
-        <foreach item="item" index="index" collection="infoHashes" open="(" separator="," close=")">
+        <foreach collection="infoHashes" item="item" open="(" separator="," close=")">
             #{item}
         </foreach>
     </select>
-    <update id="updatePeer">
+
+
+    <update id="updatePeer" parameterType="map">
         UPDATE peers
         SET uploaded = #{uploaded}, downloaded = #{downloaded}
-        WHERE peer_id = #{peerId} and info_hash = #{info_hash} and passkey = #{passkey}
+        WHERE peer_id = #{peerId} and info_hash = #{infoHash} and passkey = #{passkey}
     </update>
+
 </mapper>
diff --git a/src/main/resources/mapper/TorrentMapper.xml b/src/main/resources/mapper/TorrentMapper.xml
index cec75eb..e831504 100644
--- a/src/main/resources/mapper/TorrentMapper.xml
+++ b/src/main/resources/mapper/TorrentMapper.xml
@@ -3,31 +3,32 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
 <mapper namespace="com.example.g8backend.mapper.TorrentMapper">
-    <insert id="insertTorrent" >
+
+    <insert id="insertTorrent">
         INSERT INTO torrents (user_id, torrent_name, file_path, info_hash, file_size)
-        VALUES (#{userId}, #{torrentName}, #{filePath}, UNHEX(#{infoHash}), #{fileSize})
+        VALUES (#{userId}, #{torrentName}, #{filePath}, #{infoHash}, #{fileSize})
     </insert>
 
     <select id="getTorrentByInfoHash" resultType="com.example.g8backend.entity.Torrent">
         SELECT
-            torrent_id,
-            user_id,
-            torrent_name,
-            file_path,
-            HEX(info_hash) AS infoHash,
-            file_size
+        torrent_id,
+        user_id,
+        torrent_name,
+        file_path,
+        info_hash AS infoHash,
+        file_size
         FROM torrents
-        WHERE info_hash = UNHEX(#{infoHash})
+        WHERE info_hash = #{infoHash}
     </select>
 
     <select id="getTorrentByTorrentId" resultType="com.example.g8backend.entity.Torrent">
         SELECT
-            torrent_id,
-            user_id,
-            torrent_name,
-            file_path,
-            HEX(info_hash) AS infoHash,
-            file_size
+        torrent_id,
+        user_id,
+        torrent_name,
+        file_path,
+        info_hash AS infoHash,
+        file_size
         FROM torrents
         WHERE torrent_id = #{torrentId}
     </select>
@@ -38,19 +39,21 @@
         user_id,
         torrent_name,
         file_path,
-        HEX(info_hash) AS infoHash,
-        file_size
+        info_hash AS infoHash,
+        file_size,
+        upload_time
         FROM torrents
         WHERE info_hash IN
         <foreach collection="infoHashes" item="hash" open="(" separator="," close=")">
-            UNHEX(#{hash})
+            #{hash}
         </foreach>
     </select>
 
+
     <update id="updateIsRareByInfoHash">
-        UPDATE torrent
-        SET israre = #{israre}
+        UPDATE torrents
+        SET is_rare = #{israre}
         WHERE info_hash = #{infoHash}
     </update>
 
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql
index 0ace8eb..da70ed6 100644
--- a/src/main/resources/schema.sql
+++ b/src/main/resources/schema.sql
@@ -31,7 +31,7 @@
   `user_id` INT NOT NULL,
   `torrent_name` VARCHAR(255) NOT NULL,
   `file_path` VARCHAR(255) NOT NULL,
-  `info_hash` BINARY(20) NOT NULL,
+  `info_hash`CHAR(40) NOT NULL,
   `file_size` FLOAT NOT NULL,
   `upload_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '种子上传时间(第一次插入时自动填充)',
   `is_rare` BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否为冷门种子',
@@ -40,7 +40,7 @@
 -- Peer表(保持不变)
 CREATE TABLE IF NOT EXISTS `peers` (
   `passkey` VARCHAR(255) NOT NULL,
-  `info_hash` BINARY(20) NOT NULL,
+  `info_hash` CHAR(40) NOT NULL,
   `peer_id` VARCHAR(20) NOT NULL,
   `ip_address` VARCHAR(128) NOT NULL,
   `port` INT NOT NULL,