blob: 5ed01f8f6e5a17c14662b2701935d4422fac8a52 [file] [log] [blame]
22301102b1084372025-06-01 16:44:23 +08001package com.pt.controller;
2
3import com.pt.constant.Constants;
4import com.pt.entity.Resource;
5import com.pt.entity.User;
6import com.pt.service.ResourceService;
7import com.pt.service.UserService;
8import com.pt.utils.JWTUtils;
9import org.springframework.beans.factory.annotation.Autowired;
10import org.springframework.http.ResponseEntity;
11import org.springframework.web.bind.annotation.*;
12
13import java.util.HashMap;
14import java.util.List;
15import java.util.Map;
16
17@RestController
18@RequestMapping("/api/resource")
19@CrossOrigin(origins = "*")
20public class ResourceController {
21
22 @Autowired
23 private ResourceService resourceService;
24 private UserService userService;
25
26 @GetMapping("/list/all")
27 public ResponseEntity<?> getAllResources(@RequestHeader("token") String token,
28 @RequestParam("username") String username) {
29 Map<String, Object> ans = new HashMap<>();
30
31 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)){
32 ans.put("result", "Invalid token");
33 return ResponseEntity.badRequest().body(ans);
34 }
35
36 List<Resource> resources = resourceService.getAllResources();
37 if (resources.isEmpty()) {
38 return ResponseEntity.noContent().build();
39 }
40 return ResponseEntity.ok(resources);
41 }
42
43 @GetMapping("/list/user")
44 public ResponseEntity<?> getUserResources(@RequestHeader("token") String token,
45 @RequestParam("username") String username) {
46 Map<String, Object> ans = new HashMap<>();
47
48 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)){
49 ans.put("result", "Invalid token");
50 return ResponseEntity.badRequest().body(ans);
51 }
52
53 List<Resource> resources = resourceService.getResourcesByAuthor(username);
54 if (resources.isEmpty()) {
55 return ResponseEntity.noContent().build();
56 }
57 return ResponseEntity.ok(resources);
58 }
59
60 @PostMapping("/publish")
61 public ResponseEntity<?> publishResource(@RequestHeader("token") String token,
62 @RequestParam("username") String username,
63 @RequestParam("size") double size,
64 @RequestParam("name") String name,
65 @RequestParam("description") String description) {
66 Map<String, Object> ans = new HashMap<>();
67
68 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)){
69 ans.put("result", "Invalid token");
70 return ResponseEntity.badRequest().body(ans);
71 }
72
73 User user = userService.findByUsername(username);
74 if(user.getLevel() < 2){
75 ans.put("result", "Insufficient permissions to publish resources");
76 return ResponseEntity.status(403).body(ans);
77 }
78
79 resourceService.publishResource(name, description, username, size);
80
81 /*
82 * TODO: 在这里实现资源发布的逻辑
83 */
84
85 ans.put("result", "Resource published successfully");
86 return ResponseEntity.ok(ans);
87 }
88
89 @GetMapping("/get/{resourceId}")
90 public ResponseEntity<?> getResourceById(@PathVariable("resourceId") int resourceId,
91 @RequestHeader("token") String token,
92 @RequestParam("username") String username) {
93
94 Map<String, Object> ans = new HashMap<>();
95 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
96 ans.put("result", "Invalid token");
97 return ResponseEntity.badRequest().body(ans);
98 }
99
100 Resource resource = resourceService.getResourceById(resourceId);
101 if (resource == null) {
102 return ResponseEntity.notFound().build();
103 }
104 return ResponseEntity.ok(resource);
105 }
106
107 @GetMapping("/download/{resourceId}")
108 public ResponseEntity<?> downloadResource(@PathVariable("resourceId") int resourceId,
109 @RequestHeader("token") String token,
110 @RequestParam("username") String username) {
111
112 Map<String, Object> ans = new HashMap<>();
113 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
114 ans.put("result", "Invalid token");
115 return ResponseEntity.badRequest().body(ans);
116 }
117
118 /*
119 * TODO: 在这里实现下载资源的方法
120 */
121
122 // Here you would typically return the file or a download link
123 return ResponseEntity.ok(ans);
124 }
125
126 @GetMapping("/search")
127 public ResponseEntity<?> searchResources(@RequestHeader("token") String token,
128 @RequestParam("username") String username,
129 @RequestParam("query") String query) {
130 Map<String, Object> ans = new HashMap<>();
131
132 if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)){
133 ans.put("result", "Invalid token");
134 return ResponseEntity.badRequest().body(ans);
135 }
136
137 List<Resource> resources = resourceService.searchByQuery(query);
138 if (resources.isEmpty()) {
139 return ResponseEntity.noContent().build();
140 }
141 return ResponseEntity.ok(resources);
142 }
143
144 @GetMapping("/delete")
145 public ResponseEntity<?> deleteResource(@RequestHeader("token") String token,
146 @RequestParam("username") String username,
147 @RequestParam("resourceId") int resourceId) {
148 Map<String, Object> ans = new HashMap<>();
149 Resource resource = resourceService.getResourceById(resourceId);
150
151 if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN) || resource == null || !resource.getAuthor().equals(username)) {
152 ans.put("result", "Invalid token");
153 return ResponseEntity.badRequest().body(ans);
154 }
155
156 /*
157 TODO: 在这里实现删除资源的方法
158 */
159
160
161 resourceService.deleteResource(resourceId);
162
163 ans.put("result", "Resource deleted successfully");
164 return ResponseEntity.ok(ans);
165 }
166}