diff --git a/src/main/java/com/pt/controller/ResourceController.java b/src/main/java/com/pt/controller/ResourceController.java
index 5ed01f8..caf2050 100644
--- a/src/main/java/com/pt/controller/ResourceController.java
+++ b/src/main/java/com/pt/controller/ResourceController.java
@@ -1,8 +1,10 @@
 package com.pt.controller;
 
+import com.pt.Item.ResourceInfo;
 import com.pt.constant.Constants;
 import com.pt.entity.Resource;
 import com.pt.entity.User;
+import com.pt.service.DownloadService;
 import com.pt.service.ResourceService;
 import com.pt.service.UserService;
 import com.pt.utils.JWTUtils;
@@ -10,6 +12,7 @@
 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;
@@ -22,6 +25,7 @@
     @Autowired
     private ResourceService resourceService;
     private UserService userService;
+    private DownloadService downloadService;
 
     @GetMapping("/list/all")
     public ResponseEntity<?> getAllResources(@RequestHeader("token") String token,
@@ -37,7 +41,27 @@
         if (resources.isEmpty()) {
             return ResponseEntity.noContent().build();
         }
-        return ResponseEntity.ok(resources);
+
+        List<ResourceInfo> resourceInfos = new ArrayList<>();
+        for (Resource resource : resources) {
+            ResourceInfo resourceInfo = new ResourceInfo();
+            resourceInfo.setResourceId(resource.getResourceId());
+            resourceInfo.setName(resource.getName());
+            resourceInfo.setSize(resource.getSize());
+            resourceInfo.setDescription(resource.getDescription());
+            resourceInfo.setAuthor(resource.getAuthor());
+            resourceInfo.setPublishTime(resource.getPublishTime());
+
+            int downloadCount = downloadService.searchByResourceId(resource.getResourceId()).size();
+            int seedCount = 0; // TODO: 需要根据tracker信息计算该资源的种子树
+            resourceInfo.setDownloadCount(downloadCount);
+            resourceInfo.setSeedCount(seedCount);
+            resourceInfos.add(resourceInfo);
+        }
+
+        ans.put("message", "Resources retrieved successfully");
+        ans.put("resources", resourceInfos);
+        return ResponseEntity.ok(ans);
     }
 
     @GetMapping("/list/user")
@@ -76,12 +100,14 @@
             return ResponseEntity.status(403).body(ans);
         }
 
-        resourceService.publishResource(name, description, username, size);
-
         /*
             * TODO: 在这里实现资源发布的逻辑
+            *  需要将资源同步到Tracker服务器
+            *  种子文件需要保存
          */
 
+        resourceService.publishResource(name, description, username, size);
+
         ans.put("result", "Resource published successfully");
         return ResponseEntity.ok(ans);
     }
@@ -117,6 +143,7 @@
 
         /*
             * TODO: 在这里实现下载资源的方法
+            *       从本地的种子文件目录获取种子文件
          */
 
         // Here you would typically return the file or a download link
@@ -154,7 +181,8 @@
         }
 
         /*
-            TODO: 在这里实现删除资源的方法
+            * TODO: 在这里实现删除资源的方法
+            *  需要同步到Tracker服务器
          */
 
 
