post_report
Change-Id: I191da6e9ea7371e66dadead873abd057f5d08c74
diff --git a/src/main/java/com/example/g8backend/controller/PostController.java b/src/main/java/com/example/g8backend/controller/PostController.java
index e5e4eab..1e0adf4 100644
--- a/src/main/java/com/example/g8backend/controller/PostController.java
+++ b/src/main/java/com/example/g8backend/controller/PostController.java
@@ -16,9 +16,12 @@
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import com.example.g8backend.entity.Report;
+import com.example.g8backend.service.IReportService;
import java.util.List;
+
@RestController
@RequestMapping("/post")
@Validated
@@ -29,6 +32,8 @@
@Autowired
private PostViewMapper postViewMapper;
+ @Autowired
+ private IReportService reportService;
@PostMapping("")
public ResponseEntity<ApiResponse<Void>> createPost(@RequestBody PostCreateDTO postCreateDTO) {
@@ -191,4 +196,41 @@
Long count = postRatingService.getRatingUserCount(postId);
return ResponseEntity.ok(ApiResponse.success(count));
}
+ @PostMapping("/{postId}/report")
+ public ResponseEntity<ApiResponse<String>> reportPost(
+ @PathVariable Long postId,
+ @RequestParam String reason) {
+ long userId = (long) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+ try {
+ reportService.submitReport(userId, postId, reason);
+ return ResponseEntity.ok(ApiResponse.message("举报已提交"));
+ } catch (IllegalArgumentException e) {
+ return ResponseEntity.badRequest().body(ApiResponse.error(400, e.getMessage()));
+ }
+ }
+
+
+ @GetMapping("/reports")
+ public ResponseEntity<ApiResponse<List<Report>>> getReports(
+ @RequestParam(required = false) String status) {
+ List<Report> reports = reportService.getReports(status);
+ return ResponseEntity.ok(ApiResponse.success(reports));
+ }
+
+ @PutMapping("/report/{reportId}")
+ public ResponseEntity<ApiResponse<String>> resolveReport(
+ @PathVariable Long reportId,
+ @RequestParam Long adminId, // 实际部署时可从 token 解析或改为登录信息中获取
+ @RequestParam String status,
+ @RequestParam(required = false) String notes) {
+ try {
+ reportService.resolveReport(reportId, adminId, status, notes);
+ return ResponseEntity.ok(ApiResponse.message("举报处理完成"));
+ } catch (IllegalArgumentException e) {
+ return ResponseEntity.badRequest().body(ApiResponse.error(400, e.getMessage()));
+ }
+ }
+
+
+
}