初步实现资源与下载的框架,后续在TODO处完善即可。

Change-Id: Ie28b6c1a7a14d665f8f5873c1397e7f8c1ebd99a
diff --git a/src/main/java/com/pt/controller/ResourceController.java b/src/main/java/com/pt/controller/ResourceController.java
new file mode 100644
index 0000000..5ed01f8
--- /dev/null
+++ b/src/main/java/com/pt/controller/ResourceController.java
@@ -0,0 +1,166 @@
+package com.pt.controller;
+
+import com.pt.constant.Constants;
+import com.pt.entity.Resource;
+import com.pt.entity.User;
+import com.pt.service.ResourceService;
+import com.pt.service.UserService;
+import com.pt.utils.JWTUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/resource")
+@CrossOrigin(origins = "*")
+public class ResourceController {
+
+    @Autowired
+    private ResourceService resourceService;
+    private UserService userService;
+
+    @GetMapping("/list/all")
+    public ResponseEntity<?> getAllResources(@RequestHeader("token") String token,
+                                             @RequestParam("username") String username) {
+        Map<String, Object> ans = new HashMap<>();
+
+        if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)){
+            ans.put("result", "Invalid token");
+            return ResponseEntity.badRequest().body(ans);
+        }
+
+        List<Resource> resources = resourceService.getAllResources();
+        if (resources.isEmpty()) {
+            return ResponseEntity.noContent().build();
+        }
+        return ResponseEntity.ok(resources);
+    }
+
+    @GetMapping("/list/user")
+    public ResponseEntity<?> getUserResources(@RequestHeader("token") String token,
+                                              @RequestParam("username") String username) {
+        Map<String, Object> ans = new HashMap<>();
+
+        if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)){
+            ans.put("result", "Invalid token");
+            return ResponseEntity.badRequest().body(ans);
+        }
+
+        List<Resource> resources = resourceService.getResourcesByAuthor(username);
+        if (resources.isEmpty()) {
+            return ResponseEntity.noContent().build();
+        }
+        return ResponseEntity.ok(resources);
+    }
+
+    @PostMapping("/publish")
+    public ResponseEntity<?> publishResource(@RequestHeader("token") String token,
+                                             @RequestParam("username") String username,
+                                             @RequestParam("size") double size,
+                                             @RequestParam("name") String name,
+                                             @RequestParam("description") String description) {
+        Map<String, Object> ans = new HashMap<>();
+
+        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){
+            ans.put("result", "Insufficient permissions to publish resources");
+            return ResponseEntity.status(403).body(ans);
+        }
+
+        resourceService.publishResource(name, description, username, size);
+
+        /*
+            * TODO: 在这里实现资源发布的逻辑
+         */
+
+        ans.put("result", "Resource published successfully");
+        return ResponseEntity.ok(ans);
+    }
+
+    @GetMapping("/get/{resourceId}")
+    public ResponseEntity<?> getResourceById(@PathVariable("resourceId") int resourceId,
+                                              @RequestHeader("token") String token,
+                                              @RequestParam("username") String username) {
+
+        Map<String, Object> ans = new HashMap<>();
+        if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
+            ans.put("result", "Invalid token");
+            return ResponseEntity.badRequest().body(ans);
+        }
+
+        Resource resource = resourceService.getResourceById(resourceId);
+        if (resource == null) {
+            return ResponseEntity.notFound().build();
+        }
+        return ResponseEntity.ok(resource);
+    }
+
+    @GetMapping("/download/{resourceId}")
+    public ResponseEntity<?> downloadResource(@PathVariable("resourceId") int resourceId,
+                                              @RequestHeader("token") String token,
+                                              @RequestParam("username") String username) {
+
+        Map<String, Object> ans = new HashMap<>();
+        if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
+            ans.put("result", "Invalid token");
+            return ResponseEntity.badRequest().body(ans);
+        }
+
+        /*
+            * TODO: 在这里实现下载资源的方法
+         */
+
+        // Here you would typically return the file or a download link
+        return ResponseEntity.ok(ans);
+    }
+
+    @GetMapping("/search")
+    public ResponseEntity<?> searchResources(@RequestHeader("token") String token,
+                                             @RequestParam("username") String username,
+                                             @RequestParam("query") String query) {
+        Map<String, Object> ans = new HashMap<>();
+
+        if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)){
+            ans.put("result", "Invalid token");
+            return ResponseEntity.badRequest().body(ans);
+        }
+
+        List<Resource> resources = resourceService.searchByQuery(query);
+        if (resources.isEmpty()) {
+            return ResponseEntity.noContent().build();
+        }
+        return ResponseEntity.ok(resources);
+    }
+
+    @GetMapping("/delete")
+    public ResponseEntity<?> deleteResource(@RequestHeader("token") String token,
+                                            @RequestParam("username") String username,
+                                            @RequestParam("resourceId") int resourceId) {
+        Map<String, Object> ans = new HashMap<>();
+        Resource resource = resourceService.getResourceById(resourceId);
+
+        if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN) || resource == null || !resource.getAuthor().equals(username)) {
+            ans.put("result", "Invalid token");
+            return ResponseEntity.badRequest().body(ans);
+        }
+
+        /*
+            TODO: 在这里实现删除资源的方法
+         */
+
+
+        resourceService.deleteResource(resourceId);
+
+        ans.put("result", "Resource deleted successfully");
+        return ResponseEntity.ok(ans);
+    }
+}