package com.tourguide.api.mini; import com.tourguide.common.api.ApiResponse; import com.tourguide.modules.review.dto.OrderReviewCreateRequest; import com.tourguide.modules.review.dto.OrderReviewResponse; import com.tourguide.modules.review.service.OrderReviewService; import com.tourguide.security.AppUserPrincipal; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; /** * 游客小程序订单评价接口。 * 评价身份取自当前 MINI Token,防止客户端伪造其他游客身份提交评价。 */ @RestController @RequestMapping("/api/mini/reviews") public class MiniOrderReviewController { private final OrderReviewService reviewService; public MiniOrderReviewController(OrderReviewService reviewService) { this.reviewService = reviewService; } /** * 为当前游客本人的已完成订单创建评价,并在成功后重新计算导游平均评分。 * 仅允许评价已完成、已关联导游且尚未评价的本人订单。 * * @param principal 安全过滤器解析出的当前游客身份 * @param request 订单主键、评分和评价内容 * @return 新建的订单评价 */ @PostMapping public ApiResponse create(@AuthenticationPrincipal AppUserPrincipal principal, @Valid @RequestBody OrderReviewCreateRequest request) { return ApiResponse.success(reviewService.create(principal.getUserId(), request)); } @GetMapping("/orders/{orderId}") public ApiResponse detailByOrder(@AuthenticationPrincipal AppUserPrincipal principal, @PathVariable Long orderId) { return ApiResponse.success(reviewService.detailByOrder(principal.getUserId(), orderId)); } }