liujie
2026-07-30 280ef5100bece9b40ac51736aef037704a52a4ca
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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<OrderReviewResponse> create(@AuthenticationPrincipal AppUserPrincipal principal,
                                                   @Valid @RequestBody OrderReviewCreateRequest request) {
        return ApiResponse.success(reviewService.create(principal.getUserId(), request));
    }
 
    @GetMapping("/orders/{orderId}")
    public ApiResponse<OrderReviewResponse> detailByOrder(@AuthenticationPrincipal AppUserPrincipal principal,
                                                          @PathVariable Long orderId) {
        return ApiResponse.success(reviewService.detailByOrder(principal.getUserId(), orderId));
    }
}