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