lrj
昨天 9f8395fab13ca4b230a0f7d62636e209745c91d4
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
package com.rongyichuang.player.api;
 
import com.rongyichuang.player.dto.input.ActivityPlayerRatingInput;
import com.rongyichuang.player.dto.ActivityRegistrationInput;
import com.rongyichuang.player.dto.response.ActivityPlayerApplicationResponse;
import com.rongyichuang.player.dto.response.ActivityPlayerDetailResponse;
import com.rongyichuang.player.dto.ActivityRegistrationResponse;
import com.rongyichuang.player.dto.response.JudgeRatingStatusResponse;
import com.rongyichuang.player.dto.response.CurrentJudgeRatingResponse;
import com.rongyichuang.player.dto.response.CurrentJudgeInfoResponse;
import com.rongyichuang.player.dto.response.PlayerRegistrationResponse;
import com.rongyichuang.player.service.PlayerApplicationService;
import com.rongyichuang.player.service.ActivityPlayerDetailService;
import com.rongyichuang.player.service.ActivityPlayerRatingService;
import com.rongyichuang.player.service.ActivityPlayerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.graphql.data.method.annotation.Argument;
import org.springframework.graphql.data.method.annotation.MutationMapping;
import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.stereotype.Controller;
 
import java.math.BigDecimal;
import java.util.List;
 
@Controller
public class PlayerGraphqlApi {
 
    private static final Logger log = LoggerFactory.getLogger(PlayerGraphqlApi.class);
 
    private final PlayerApplicationService service;
    private final ActivityPlayerDetailService detailService;
    private final ActivityPlayerRatingService ratingService;
    private final ActivityPlayerService activityPlayerService;
 
    public PlayerGraphqlApi(PlayerApplicationService service,
                           ActivityPlayerDetailService detailService,
                           ActivityPlayerRatingService ratingService,
                           ActivityPlayerService activityPlayerService) {
        this.service = service;
        this.detailService = detailService;
        this.ratingService = ratingService;
        this.activityPlayerService = activityPlayerService;
    }
 
    @QueryMapping
    public List<ActivityPlayerApplicationResponse> activityPlayerApplications(
            @Argument String name,
            @Argument Long activityId,
            @Argument Integer page,
            @Argument Integer size
    ) {
        return service.listApplications(name, activityId, page, size);
    }
 
    /**
     * 获取比赛报名详情(用于评分)
     */
    @QueryMapping
    public ActivityPlayerDetailResponse activityPlayerDetail(@Argument Long id) {
        return detailService.getDetailForRating(id);
    }
 
    /**
     * 查询玩家在指定活动中的报名状态
     */
    @QueryMapping
    public PlayerRegistrationResponse playerRegistration(@Argument Long activityId) {
        return activityPlayerService.getPlayerRegistration(activityId);
    }
 
    /**
     * 保存比赛报名评分
     */
    @MutationMapping
    public Boolean saveActivityPlayerRating(@Argument ActivityPlayerRatingInput input) {
        log.info("收到评分保存请求,activityPlayerId: {}, ratings count: {}", 
                input.getActivityPlayerId(), input.getRatings() != null ? input.getRatings().size() : 0);
        try {
            Boolean result = ratingService.saveRating(input);
            log.info("评分保存结果: {}", result);
            return result;
        } catch (Exception e) {
            log.error("GraphQL API 层捕获异常: {}", e.getMessage(), e);
            throw e;
        }
    }
 
    /**
     * 获取指定选手的所有评委评分状态
     */
    @QueryMapping
    public List<JudgeRatingStatusResponse> judgeRatingsForPlayer(@Argument Long activityPlayerId) {
        log.info("获取选手评委评分状态,activityPlayerId: {}", activityPlayerId);
        return ratingService.getAllJudgeRatingsForPlayer(activityPlayerId);
    }
 
    /**
     * 获取当前评委对指定选手的评分
     */
    @QueryMapping
    public CurrentJudgeRatingResponse currentJudgeRating(@Argument Long activityPlayerId) {
        log.info("获取当前评委评分,activityPlayerId: {}", activityPlayerId);
        return ratingService.getCurrentJudgeRating(activityPlayerId);
    }
 
    /**
     * 获取指定选手的平均分
     */
    @QueryMapping
    public BigDecimal averageScoreForPlayer(@Argument Long activityPlayerId) {
        log.info("获取选手平均分,activityPlayerId: {}", activityPlayerId);
        return ratingService.getAverageScoreForPlayer(activityPlayerId);
    }
 
    /**
     * 获取当前评委信息
     */
    @QueryMapping
    public CurrentJudgeInfoResponse currentJudgeInfo() {
        log.info("获取当前评委信息");
        return ratingService.getCurrentJudgeInfo();
    }
 
    /**
     * 提交活动报名
     */
    @MutationMapping
    public ActivityRegistrationResponse submitActivityRegistration(@Argument ActivityRegistrationInput input) {
        log.info("收到活动报名请求,activityId: {}, playerName: {}", 
                input.getActivityId(), input.getPlayerInfo().getName());
        try {
            ActivityRegistrationResponse result = activityPlayerService.submitActivityRegistration(input);
            log.info("活动报名结果: {}", result.getSuccess());
            return result;
        } catch (Exception e) {
            log.error("活动报名失败: {}", e.getMessage(), e);
            // 返回失败响应
            ActivityRegistrationResponse response = new ActivityRegistrationResponse();
            response.setSuccess(false);
            response.setMessage("报名失败: " + e.getMessage());
            return response;
        }
    }
}