post_rating
Change-Id: Ia1a6fb3f87b793a6307046e36951c1fb36b213c8
diff --git a/src/main/java/com/example/g8backend/controller/PostController.java b/src/main/java/com/example/g8backend/controller/PostController.java
index 9ac733f..e5e4eab 100644
--- a/src/main/java/com/example/g8backend/controller/PostController.java
+++ b/src/main/java/com/example/g8backend/controller/PostController.java
@@ -8,17 +8,20 @@
import com.example.g8backend.entity.Post;
import com.example.g8backend.entity.PostView;
import com.example.g8backend.mapper.PostViewMapper;
+import com.example.g8backend.service.IPostRatingService;
import com.example.g8backend.service.IPostService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/post")
+@Validated
public class PostController {
@Autowired
@@ -149,4 +152,43 @@
Page<Post> result = postService.getRecommendedByTags(page, size, userId);
return ResponseEntity.ok(ApiResponse.success(result));
}
+ @Autowired
+ private IPostRatingService postRatingService;
+
+ @PostMapping("/{postId}/rate")
+ public ResponseEntity<ApiResponse<String>> ratePost(
+ @PathVariable Long postId,
+ @RequestParam Integer rating) {
+ try {
+ long userId = (long) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+
+ // 调用服务层方法(服务层已内置校验逻辑)
+ postRatingService.ratePost(userId, postId, rating);
+
+ // 成功时返回空数据
+ return ResponseEntity.ok(ApiResponse.success("评分成功"));
+
+ } catch (IllegalArgumentException e) {
+ // 处理参数校验异常(如评分范围错误)
+ return ResponseEntity.badRequest()
+ .body(ApiResponse.error(400, e.getMessage()));
+
+ } catch (RuntimeException e) {
+ // 处理数据库操作失败等运行时异常
+ return ResponseEntity.internalServerError()
+ .body(ApiResponse.error(500, e.getMessage()));
+ }
+ }
+
+ @GetMapping("/{postId}/average-rating")
+ public ResponseEntity<ApiResponse<Double>> getAverageRating(@PathVariable Long postId) {
+ Double avg = postRatingService.getAverageRating(postId);
+ return ResponseEntity.ok(ApiResponse.success(avg));
+ }
+
+ @GetMapping("/{postId}/rating-users/count")
+ public ResponseEntity<ApiResponse<Long>> getRatingUserCount(@PathVariable Long postId) {
+ Long count = postRatingService.getRatingUserCount(postId);
+ return ResponseEntity.ok(ApiResponse.success(count));
+ }
}