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 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 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; } } }