基于用户共享率设置阈值,不满足无法下载资源,同时保障新用户(下载量较低)不受限制
Change-Id: I0842c58bda251c05eb5d0a42e126fd39ac76190b
diff --git a/src/main/java/com/pt/controller/ResourceController.java b/src/main/java/com/pt/controller/ResourceController.java
index 3e3c875..306851a 100644
--- a/src/main/java/com/pt/controller/ResourceController.java
+++ b/src/main/java/com/pt/controller/ResourceController.java
@@ -25,6 +25,8 @@
@Autowired
private ResourceService resourceService;
+
+ @Autowired
private UserService userService;
@GetMapping("/list/all")
@@ -129,6 +131,30 @@
return ResponseEntity.badRequest().body(ans);
}
+ User user = userService.findByUsername(username);
+ if (user == null) {
+ ans.put("message", "User not found");
+ return ResponseEntity.status(404).body(ans);
+ }
+
+ final double MIN_SHARE_RATIO_THRESHOLD = 0.5; // 最低共享率要求
+ final long DOWNLOAD_EXEMPTION_BYTES = 20L * 1024L * 1024L * 1024L; // 20GB下载量豁免
+
+ long uploaded = user.getUploaded();
+ long downloaded = user.getDownloaded();
+
+ // 如果用户的下载量超过豁免值,则检查其共享率
+ if (downloaded > DOWNLOAD_EXEMPTION_BYTES) {
+ // 防止除以零
+ double shareRatio = (downloaded == 0) ? Double.MAX_VALUE : (double) uploaded / downloaded;
+ if (shareRatio < MIN_SHARE_RATIO_THRESHOLD) {
+ ans.put("message", "Share ratio is too low. Please seed more to improve your ratio before downloading new resources.");
+ ans.put("current_share_ratio", String.format("%.2f", shareRatio));
+ ans.put("required_share_ratio", MIN_SHARE_RATIO_THRESHOLD);
+ return ResponseEntity.status(403).body(ans); // 403 Forbidden
+ }
+ }
+
Resource resource = resourceService.getResourceById(resourceId);
byte[] file = resourceService.getTorrentFileByResource(resource, username);
if (file == null) {