完成部分资源功能
Change-Id: Idfaef80363ef191a294e52ae53cdd4e2b3e7ccef
diff --git a/src/main/java/com/pt/controller/ResourceController.java b/src/main/java/com/pt/controller/ResourceController.java
index caf2050..8e08e16 100644
--- a/src/main/java/com/pt/controller/ResourceController.java
+++ b/src/main/java/com/pt/controller/ResourceController.java
@@ -1,10 +1,8 @@
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;
@@ -12,10 +10,11 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
-import java.util.ArrayList;
+import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.io.File;
@RestController
@RequestMapping("/api/resource")
@@ -25,7 +24,6 @@
@Autowired
private ResourceService resourceService;
private UserService userService;
- private DownloadService downloadService;
@GetMapping("/list/all")
public ResponseEntity<?> getAllResources(@RequestHeader("token") String token,
@@ -41,27 +39,7 @@
if (resources.isEmpty()) {
return ResponseEntity.noContent().build();
}
-
- 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);
+ return ResponseEntity.ok(resources);
}
@GetMapping("/list/user")
@@ -89,29 +67,30 @@
@RequestParam("description") String description) {
Map<String, Object> ans = new HashMap<>();
- if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)){
+ if (!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
ans.put("result", "Invalid token");
return ResponseEntity.badRequest().body(ans);
}
User user = userService.findByUsername(username);
- if(user.getLevel() < 2){
+ if (user == null || user.getLevel() < 2) {
ans.put("result", "Insufficient permissions to publish resources");
return ResponseEntity.status(403).body(ans);
}
- /*
- * TODO: 在这里实现资源发布的逻辑
- * 需要将资源同步到Tracker服务器
- * 种子文件需要保存
- */
-
- resourceService.publishResource(name, description, username, size);
+ try {
+ resourceService.publishResource(name, description, username, size);
+ } catch (Exception e) {
+ ans.put("result", "Failed to publish resource: " + e.getMessage());
+ return ResponseEntity.status(500).body(ans);
+ }
ans.put("result", "Resource published successfully");
return ResponseEntity.ok(ans);
}
+
+
@GetMapping("/get/{resourceId}")
public ResponseEntity<?> getResourceById(@PathVariable("resourceId") int resourceId,
@RequestHeader("token") String token,
@@ -133,7 +112,7 @@
@GetMapping("/download/{resourceId}")
public ResponseEntity<?> downloadResource(@PathVariable("resourceId") int resourceId,
@RequestHeader("token") String token,
- @RequestParam("username") String username) {
+ @RequestParam("username") String username) throws IOException {
Map<String, Object> ans = new HashMap<>();
if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
@@ -141,13 +120,16 @@
return ResponseEntity.badRequest().body(ans);
}
- /*
- * TODO: 在这里实现下载资源的方法
- * 从本地的种子文件目录获取种子文件
- */
+ Resource resource = resourceService.getResourceById(resourceId);
+ byte[] file = resourceService.getTorrentFileByResource(resource, username);
+ if (file == null) {
+ return ResponseEntity.notFound().build();
+ }
- // Here you would typically return the file or a download link
- return ResponseEntity.ok(ans);
+ return ResponseEntity.ok()
+ .header("Content-Type", "application/x-bittorrent")
+ .header("Content-Disposition", "attachment; filename=\"" + resource.getName() + ".torrent\"")
+ .body(file);
}
@GetMapping("/search")
@@ -176,19 +158,19 @@
Resource resource = resourceService.getResourceById(resourceId);
if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN) || resource == null || !resource.getAuthor().equals(username)) {
- ans.put("result", "Invalid token");
+ ans.put("result", "Invalid token or insufficient permissions");
return ResponseEntity.badRequest().body(ans);
}
- /*
- * TODO: 在这里实现删除资源的方法
- * 需要同步到Tracker服务器
- */
-
-
- resourceService.deleteResource(resourceId);
+ try {
+ resourceService.deleteResource(resourceId);
+ } catch (Exception e) {
+ ans.put("result", "Failed to delete resource: " + e.getMessage());
+ return ResponseEntity.status(500).body(ans);
+ }
ans.put("result", "Resource deleted successfully");
return ResponseEntity.ok(ans);
}
+
}