diff --git a/G12Project b/G12Project
deleted file mode 160000
index af6e08a..0000000
--- a/G12Project
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit af6e08a2d39246df8c2e77c997e666a833794131
diff --git a/src/main/java/com/pt/CustomResponse.java b/src/main/java/com/pt/CustomResponse.java
new file mode 100644
index 0000000..dfcb1ea
--- /dev/null
+++ b/src/main/java/com/pt/CustomResponse.java
@@ -0,0 +1,35 @@
+package com.pt;
+
+import java.util.Map;
+
+public class CustomResponse {
+    private int code;
+    private String message;
+    private Map<String, Object> data;
+
+    public CustomResponse(int code, String message, Map<String, Object> data) {
+        this.code = code;
+        this.message = message;
+        this.data = data;
+    }
+
+    public int getCode() {
+        return code;
+    }
+    public void setCode(int code) {
+        this.code = code;
+    }
+    public String getMessage() {
+        return message;
+    }
+    public void setMessage(String message) {
+        this.message = message;
+    }
+    public Map<String, Object> getData() {
+        return data;
+    }
+    public void setData(Map<String, Object> data) {
+        this.data = data;
+    }
+
+}
diff --git a/src/main/java/com/pt/Item/CommentInfo.java b/src/main/java/com/pt/Item/CommentInfo.java
new file mode 100644
index 0000000..a4a20db
--- /dev/null
+++ b/src/main/java/com/pt/Item/CommentInfo.java
@@ -0,0 +1,68 @@
+package com.pt.Item;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+public class CommentInfo {
+
+    private int commentId;
+    private String content;
+    private String writer;
+    private int parentPost;
+    private LocalDateTime publishDate;
+    private String reviewer;
+    private int reviewerId;
+
+    public CommentInfo() {
+    }
+    public CommentInfo(int commentId, String content, String writer, int parentPost, LocalDateTime publishDate) {
+        this.commentId = commentId;
+        this.content = content;
+        this.writer = writer;
+        this.parentPost = parentPost;
+        this.publishDate = publishDate;
+    }
+
+    public int getCommentId() {
+        return commentId;
+    }
+    public void setCommentId(int commentId) {
+        this.commentId = commentId;
+    }
+    public String getContent() {
+        return content;
+    }
+    public void setContent(String content) {
+        this.content = content;
+    }
+    public String getWriter() {
+        return writer;
+    }
+    public void setWriter(String writer) {
+        this.writer = writer;
+    }
+    public int getParentPost() {
+        return parentPost;
+    }
+    public void setParentPost(int parentPost) {
+        this.parentPost = parentPost;
+    }
+    public LocalDateTime getPublishDate() {
+        return publishDate;
+    }
+    public void setPublishDate(LocalDateTime publishDate) {
+        this.publishDate = publishDate;
+    }
+    public String getReviewer() {
+        return reviewer;
+    }
+    public void setReviewer(String reviewer) {
+        this.reviewer = reviewer;
+    }
+    public int getReviewerId() {
+        return reviewerId;
+    }
+    public void setReviewerId(int reviewerId) {
+        this.reviewerId = reviewerId;
+    }
+}
diff --git a/src/main/java/com/pt/constant/Constants.java b/src/main/java/com/pt/constant/Constants.java
index e8cecd3..a54704c 100644
--- a/src/main/java/com/pt/constant/Constants.java
+++ b/src/main/java/com/pt/constant/Constants.java
@@ -2,7 +2,7 @@
 
 public class Constants {
 
-    public static final int DEFAULT_EXPIRE_TIME = 600000;
+    public static final long DEFAULT_EXPIRE_TIME = 7 * 24 * 3600000;
 
     /*
         * 用户角色
diff --git a/src/main/java/com/pt/controller/AdminController.java b/src/main/java/com/pt/controller/AdminController.java
index 8af5b56..71159e5 100644
--- a/src/main/java/com/pt/controller/AdminController.java
+++ b/src/main/java/com/pt/controller/AdminController.java
@@ -29,7 +29,11 @@
         Admin admin = adminService.findByUsernameAndPassword(username, password);
         if (admin != null) {
             ans.put("message", "Login successful");
-            ans.put("data", JWTUtils.generateToken(username, Constants.UserRole.ADMIN, Constants.DEFAULT_EXPIRE_TIME));
+            ans.put("data", Map.of(
+                    "token", JWTUtils.generateToken(username, Constants.UserRole.ADMIN, Constants.DEFAULT_EXPIRE_TIME),
+                    "uid", admin.getId(),
+                    "username", admin.getUsername()
+            ));
             return ResponseEntity.ok().body(ans);
         } else {
             ans.put("message", "Invalid username or password");
diff --git a/src/main/java/com/pt/controller/CommentController.java b/src/main/java/com/pt/controller/CommentController.java
index 00e091d..623d94a 100644
--- a/src/main/java/com/pt/controller/CommentController.java
+++ b/src/main/java/com/pt/controller/CommentController.java
@@ -1,13 +1,19 @@
 package com.pt.controller;
 
+import com.pt.Item.CommentInfo;
 import com.pt.constant.Constants;
+import com.pt.entity.Post;
+import com.pt.entity.User;
 import com.pt.service.CommentService;
+import com.pt.service.PostService;
+import com.pt.service.UserService;
 import com.pt.utils.JWTUtils;
 import com.pt.entity.Comment;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -20,6 +26,12 @@
     @Autowired
     private CommentService commentService;
 
+    @Autowired
+    private PostService postService;
+
+    @Autowired
+    private UserService userService;
+
     @PostMapping("/add")
     public ResponseEntity<?> addComment(
             @RequestHeader("token") String token,
@@ -28,6 +40,7 @@
         String content = request.get("content");
         String username = request.get("username");
         int postId = Integer.parseInt(request.get("postId"));
+        Integer reviewer = request.get("reviewer") != null ? Integer.parseInt(request.get("reviewer")) : null;
 
         Map<String, Object> ans = new HashMap<>();
 
@@ -36,7 +49,7 @@
             return ResponseEntity.badRequest().body(ans);
         }
 
-        commentService.addComment(content, username, postId);
+        commentService.addComment(content, username, postId, reviewer);
         ans.put("message", "Comment added successfully");
         return ResponseEntity.ok(ans);
     }
@@ -44,10 +57,9 @@
     @DeleteMapping("/delete")
     public ResponseEntity<?> deleteComment(
             @RequestHeader("token") String token,
-            @RequestBody Map<String, String> request
+            @RequestParam("username") String username,
+            @RequestParam("commentId") int commentId
     ) {
-        String username = request.get("username");
-        int commentId = Integer.parseInt(request.get("commentId"));
 
         Map<String, Object> ans = new HashMap<>();
 
@@ -74,10 +86,37 @@
             return ResponseEntity.badRequest().body(ans);
         }
 
+        Post post = postService.findPostById(postId);
         List<Comment> comments = commentService.getCommentsByPostId(postId);
+        List<CommentInfo> commentInfos = new ArrayList<>();
+        for(Comment comment : comments) {
+            CommentInfo commentInfo = new CommentInfo();
+            commentInfo.setCommentId(comment.getCommentId());
+            commentInfo.setContent(comment.getContent());
+            commentInfo.setWriter(comment.getWriter());
+            commentInfo.setPublishDate(comment.getPublishDate());
+
+            if(comment.getReviewer() != null) {
+                Comment r = commentService.getCommentById(comment.getReviewer());
+                if(r != null) {
+                    commentInfo.setReviewer(r.getWriter());
+                    commentInfo.setReviewerId(comment.getReviewer());
+                } else {
+                    commentInfo.setReviewer("Unknown Reviewer");
+                    commentInfo.setReviewerId(0);
+                }
+            } else {
+                commentInfo.setReviewer("");
+                commentInfo.setReviewerId(0);
+            }
+
+            commentInfos.add(commentInfo);
+        }
+
         ans.put("message", "Comments retrieved successfully");
         ans.put("data", Map.of(
-           "comments", comments
+                "content", post.getContent(),
+                "comments", commentInfos
         ));
         return ResponseEntity.ok(ans);
     }
diff --git a/src/main/java/com/pt/controller/PostController.java b/src/main/java/com/pt/controller/PostController.java
index 3723dbd..c61bd3e 100644
--- a/src/main/java/com/pt/controller/PostController.java
+++ b/src/main/java/com/pt/controller/PostController.java
@@ -44,12 +44,6 @@
             return ResponseEntity.badRequest().body(ans);
         }
 
-        Post existingPost = postService.findPostByTitle(title);
-        if (existingPost != null) {
-            ans.put("result", "Post with this title already exists");
-            return ResponseEntity.badRequest().body(ans);
-        }
-
         postService.createPost(title, content, author);
         ans.put("message", "Post created successfully");
         return ResponseEntity.ok(ans);
@@ -91,9 +85,15 @@
         if(date != null){
             posts.removeIf(post -> !post.getPublishDate().toString().equals(date));
         }
+
+        posts.sort(
+                // 按发布日期降序排序
+                (p1, p2) -> p2.getPublishDate().compareTo(p1.getPublishDate())
+        );
+
         ans.put("message", "Post retrieved successfully");
         ans.put("data", Map.of(
-                "post", posts
+                "posts", posts
         ));
         return ResponseEntity.ok(ans);
     }
@@ -108,11 +108,9 @@
     @DeleteMapping("/delete")
     public ResponseEntity<?> deletePost(
             @RequestHeader("token") String token,
-            @RequestBody Map<String, String> request
+            @RequestParam("username") String username,
+            @RequestParam("pid") int pid
     ) {
-        String username = request.get("username");
-        int pid = Integer.parseInt(request.get("pid"));
-
         Map<String, Object> ans = new HashMap<>();
 
         if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN)){
diff --git a/src/main/java/com/pt/controller/UserController.java b/src/main/java/com/pt/controller/UserController.java
index 7222f36..3bb05c5 100644
--- a/src/main/java/com/pt/controller/UserController.java
+++ b/src/main/java/com/pt/controller/UserController.java
@@ -77,7 +77,14 @@
         if (user != null) {
             String token = JWTUtils.generateToken(username, Constants.UserRole.USER, Constants.DEFAULT_EXPIRE_TIME);
             ans.put("message", "Login successful");
-            ans.put("data", token);
+            ans.put("data", Map.of(
+                    "token", token,
+                    "uid", user.getUid(),
+                    "username", user.getUsername(),
+                    "email", user.getEmail(),
+                    "level", user.getLevel(),
+                    "points", user.getPoints()
+            ));
             return ResponseEntity.ok().body(ans);
         } else {
             ans.put("message", "Invalid username or password");
@@ -160,9 +167,8 @@
 
     @DeleteMapping("/delete")
     public ResponseEntity<?> deleteUser(@RequestHeader("token") String token,
-                                        @RequestBody Map<String, String> request) {
-        String username = request.get("username");
-        String targetUsername = request.get("targetUsername");
+                                        @RequestParam("username") String username,
+                                        @RequestParam("targetUsername") String targetUsername) {
 
         Map<String, Object> ans = new HashMap<>();
         if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN)) {
@@ -183,8 +189,7 @@
 
     @GetMapping("/list")
     public ResponseEntity<?> listUsers(@RequestHeader("token") String token,
-                                       @RequestBody Map<String, String> request) {
-        String username = request.get("username");
+                                       @RequestParam("username") String username) {
         if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN)) {
             return ResponseEntity.badRequest().body("Invalid token");
         }
@@ -203,8 +208,10 @@
                                          @RequestParam("username") String username) {
 
         Map<String, Object> ans = new HashMap<>();
+        System.out.println("Enter user info ");
         if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
             ans.put("message", "Invalid token");
+            System.out.println("Invalid token");
             return ResponseEntity.badRequest().body(ans);
         }
 
@@ -212,9 +219,11 @@
         if (user != null) {
             ans.put("message", "User info retrieved successfully");
             ans.put("data", user);
+            System.out.println("User info retrieved successfully");
             return ResponseEntity.ok(ans);
         } else {
             ans.put("message", "User not found");
+            System.out.println("User not found");
             return ResponseEntity.badRequest().body(ans);
         }
     }
diff --git a/src/main/java/com/pt/entity/Comment.java b/src/main/java/com/pt/entity/Comment.java
index b40100b..268ba64 100644
--- a/src/main/java/com/pt/entity/Comment.java
+++ b/src/main/java/com/pt/entity/Comment.java
@@ -4,6 +4,7 @@
 import jakarta.persistence.GeneratedValue;
 import jakarta.persistence.GenerationType;
 import jakarta.persistence.Id;
+import org.hibernate.annotations.Formula;
 
 import java.time.LocalDateTime;
 
@@ -20,6 +21,8 @@
 
     private LocalDateTime publishDate;
 
+    private Integer reviewer;
+
     public Comment() {
         publishDate = LocalDateTime.now();
     }
@@ -70,6 +73,13 @@
     public void setPublishDate(LocalDateTime publishDate) {
         this.publishDate = publishDate;
     }
+
+    public Integer getReviewer() {
+        return reviewer;
+    }
+    public void setReviewer(Integer reviewer) {
+        this.reviewer = reviewer;
+    }
 }
 
 
diff --git a/src/main/java/com/pt/service/CommentService.java b/src/main/java/com/pt/service/CommentService.java
index 3d8b7dd..1ac817e 100644
--- a/src/main/java/com/pt/service/CommentService.java
+++ b/src/main/java/com/pt/service/CommentService.java
@@ -17,11 +17,16 @@
         this.commentRepository = commentRepository;
     }
 
-    public void addComment(String content, String username, int postId) {
+    public void addComment(String content, String username, int postId, Integer reviewer) {
+        System.out.println("Adding comment: " + content + " by " + username + " on post ID: " + postId + " with reviewer ID: " + reviewer);
         Comment comment = new Comment();
         comment.setContent(content);
         comment.setWriter(username);
         comment.setParentPost(postId);
+        if(reviewer != null) {
+            System.out.println("Setting reviewer ID: " + reviewer);
+            comment.setReviewer(reviewer);
+        }
         commentRepository.save(comment);
     }
 
@@ -37,4 +42,8 @@
         );
         return comments;
     }
+
+    public Comment getCommentById(int commentId) {
+        return commentRepository.findById(commentId).orElse(null);
+    }
 }
diff --git a/src/main/java/com/pt/service/TorrentService.java b/src/main/java/com/pt/service/TorrentService.java
index 1fdb700..ad38622 100644
--- a/src/main/java/com/pt/service/TorrentService.java
+++ b/src/main/java/com/pt/service/TorrentService.java
@@ -18,6 +18,10 @@
     private TorrentMetaRepository torrentMetaRepository;
 
     public TorrentMeta parseAndSaveTorrent(byte[] torrentBytes) throws Exception {
+        System.out.println("111");
+        for (byte b : torrentBytes) {
+            System.out.println(b);
+        }
         Map<String, Object> torrentDict = (Map<String, Object>) BencodeCodec.decode(torrentBytes);
         if (!torrentDict.containsKey("info")) {
             throw new IllegalArgumentException("Invalid torrent file: missing 'info' dictionary");
@@ -25,12 +29,14 @@
 
         Map<String, Object> infoDict = (Map<String, Object>) torrentDict.get("info");
 
+        System.out.println(222);
         // 计算 info_hash
         byte[] infoEncoded = BencodeCodec.encode(infoDict);
         MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
         byte[] infoHashBytes = sha1.digest(infoEncoded);
         String infoHash = bytesToHex(infoHashBytes);
 
+        System.out.println(333);
         // 获取文件名，大小等
         String name = (String) infoDict.get("name");
         long length = 0;
diff --git a/src/main/java/com/pt/testResponse/TestController.java b/src/main/java/com/pt/testResponse/TestController.java
index a0dbae9..52715ac 100644
--- a/src/main/java/com/pt/testResponse/TestController.java
+++ b/src/main/java/com/pt/testResponse/TestController.java
@@ -1,15 +1,25 @@
 package com.pt.testResponse;
 
+import com.pt.CustomResponse;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
+
 @RestController
 @CrossOrigin(origins = "*")
 public class TestController {
 
     @GetMapping("/api/test")
-    public String testResponse() {
-        return "Hello, world!";
+    public CustomResponse testResponse() {
+        return new CustomResponse(
+                1,
+                "This is a test response",
+                Map.of(
+                        "key1", "value1",
+                        "key2", "value2"
+                )
+        );
     }
 }
diff --git a/src/main/java/com/pt/utils/JWTUtils.java b/src/main/java/com/pt/utils/JWTUtils.java
index 70a1221..6b93c9d 100644
--- a/src/main/java/com/pt/utils/JWTUtils.java
+++ b/src/main/java/com/pt/utils/JWTUtils.java
@@ -56,7 +56,7 @@
 
     public static String generateToken(String username,
                                  Constants.UserRole userType,
-                                 int expireTime) {
+                                 long expireTime) {
         Map<String, Object> claims = new HashMap<>();
         claims.put("username", username);
         claims.put("userType", userType.getValue());
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 97c5ef8..ddef23c 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -3,5 +3,9 @@
 spring.datasource.url=jdbc:mysql://202.205.102.121:3306/g12develop
 spring.datasource.username=team12
 spring.datasource.password=123456abc
+
+#spring.datasource.url=jdbc:mysql://localhost:3306/g12develop
+#spring.datasource.username=root
+#spring.datasource.password=060050aaa
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
 spring.jackson.time-zone = Asia/Shanghai
\ No newline at end of file
