Skip to content

Commit

Permalink
refactor: 코드 리뷰를 기반으로 코드 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
gikhoon committed May 29, 2024
1 parent 7429c1c commit bdd3775
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@
import org.cotato.csquiz.api.education.dto.EducationIdOfQuizResponse;
import org.cotato.csquiz.api.education.dto.FindEducationStatusResponse;
import org.cotato.csquiz.api.education.dto.UpdateEducationRequest;
import org.cotato.csquiz.api.education.dto.WinnerInfoResponse;
import org.cotato.csquiz.api.quiz.dto.KingMemberInfo;
import org.cotato.csquiz.domain.education.service.EducationService;
import org.cotato.csquiz.domain.education.service.KingMemberService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
Expand All @@ -31,7 +28,6 @@
public class EducationController {

private final EducationService educationService;
private final KingMemberService kingMemberService;

@GetMapping
public ResponseEntity<List<AllEducationResponse>> findEducationListByGeneration(
Expand Down Expand Up @@ -61,44 +57,4 @@ public ResponseEntity<EducationIdOfQuizResponse> findEducationId(@RequestParam("
log.info("[{} quizId의 educationId 조회 컨트롤러]", quizId);
return ResponseEntity.ok().body(educationService.findEducationIdOfQuizId(quizId));
}

@GetMapping("/result/kings")
public ResponseEntity<List<KingMemberInfo>> findFinalKingMembers(@RequestParam("educationId") Long educationId) {
log.info("[{} 교육 결승진출자 조회 컨트롤러]", educationId);
return ResponseEntity.ok().body(educationService.findKingMemberInfo(educationId));
}

@PostMapping("/result/kings")
public ResponseEntity<Void> calculateKingMembers(@RequestParam("educationId") Long educationId) {
log.info("[{} 교육 결승진출자 계산하기]", educationId);
kingMemberService.saveKingMember(educationId);
return ResponseEntity.noContent().build();
}

@GetMapping("/send/kings")
public ResponseEntity<Void> sendKingCommand(@RequestParam("educationId") Long educationId) {
log.info("[{} 교육 결승진출자 재전송하기]", educationId);
kingMemberService.sendKingCommand(educationId);
return ResponseEntity.noContent().build();
}

@GetMapping("/result/winner")
public ResponseEntity<WinnerInfoResponse> findWinner(@RequestParam("educationId") Long educationId) {
log.info("[{} 교육 우승자 조회 컨트롤러]", educationId);
return ResponseEntity.ok().body(educationService.findWinner(educationId));
}

@PostMapping("/result/winner")
public ResponseEntity<Void> calculateWinner(@RequestParam("educationId") Long educationId) {
log.info("[{} 교육 우승자 계산]", educationId);
kingMemberService.calculateWinner(educationId);
return ResponseEntity.noContent().build();
}

@GetMapping("/send/winner")
public ResponseEntity<Void> sendWinnerCommand(@RequestParam("educationId") Long educationId) {
log.info("[{} 교육 결승진출자 재전송하기]", educationId);
kingMemberService.sendWinnerCommand(educationId);
return ResponseEntity.noContent().build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package org.cotato.csquiz.api.education.controller;

import jakarta.validation.Valid;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.cotato.csquiz.api.education.dto.AllEducationResponse;
import org.cotato.csquiz.api.education.dto.CreateEducationRequest;
import org.cotato.csquiz.api.education.dto.CreateEducationResponse;
import org.cotato.csquiz.api.education.dto.EducationIdOfQuizResponse;
import org.cotato.csquiz.api.education.dto.FindEducationStatusResponse;
import org.cotato.csquiz.api.education.dto.UpdateEducationRequest;
import org.cotato.csquiz.api.education.dto.WinnerInfoResponse;
import org.cotato.csquiz.api.quiz.dto.KingMemberInfo;
import org.cotato.csquiz.domain.education.service.EducationService;
import org.cotato.csquiz.domain.education.service.KingMemberService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/v1/api/education")
@RequiredArgsConstructor
@Slf4j
public class EducationResultController {

private final EducationService educationService;
private final KingMemberService kingMemberService;

@GetMapping("/result/kings")
public ResponseEntity<List<KingMemberInfo>> findFinalKingMembers(@RequestParam("educationId") Long educationId) {
log.info("[{} 교육 결승진출자 조회 컨트롤러]", educationId);
return ResponseEntity.ok().body(educationService.findKingMemberInfo(educationId));
}

@PostMapping("/result/kings")
public ResponseEntity<Void> calculateKingMembers(@RequestParam("educationId") Long educationId) {
log.info("[{} 교육 결승진출자 계산하기]", educationId);
kingMemberService.saveKingMember(educationId);
return ResponseEntity.noContent().build();
}

@GetMapping("/send/kings")
public ResponseEntity<Void> sendKingCommand(@RequestParam("educationId") Long educationId) {
log.info("[{} 교육 결승진출자 재전송하기]", educationId);
kingMemberService.sendKingCommand(educationId);
return ResponseEntity.noContent().build();
}

@GetMapping("/result/winner")
public ResponseEntity<WinnerInfoResponse> findWinner(@RequestParam("educationId") Long educationId) {
log.info("[{} 교육 우승자 조회 컨트롤러]", educationId);
return ResponseEntity.ok().body(educationService.findWinner(educationId));
}

@PostMapping("/result/winner")
public ResponseEntity<Void> calculateWinner(@RequestParam("educationId") Long educationId) {
log.info("[{} 교육 우승자 계산]", educationId);
kingMemberService.calculateWinner(educationId);
return ResponseEntity.noContent().build();
}

@GetMapping("/send/winner")
public ResponseEntity<Void> sendWinnerCommand(@RequestParam("educationId") Long educationId) {
log.info("[{} 교육 결승진출자 재전송하기]", educationId);
kingMemberService.sendWinnerCommand(educationId);
return ResponseEntity.noContent().build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@ public record QuizStopResponse(
String command,
Long quizId
) {
public static final String STOP_COMMAND = "stop";

public static QuizStopResponse from(Long quizId) {
return new QuizStopResponse(
"stop",
STOP_COMMAND,
quizId
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import org.cotato.csquiz.api.socket.dto.QuizStartResponse;
import org.cotato.csquiz.api.socket.dto.QuizStatusResponse;
import org.cotato.csquiz.api.socket.dto.QuizStopResponse;
import org.cotato.csquiz.domain.education.entity.Education;
import org.cotato.csquiz.domain.education.entity.Quiz;
import org.cotato.csquiz.domain.auth.enums.MemberRole;
import org.cotato.csquiz.domain.auth.enums.MemberRoleGroup;
Expand All @@ -19,7 +18,6 @@
import java.util.concurrent.ConcurrentHashMap;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.cotato.csquiz.domain.education.service.EducationService;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
Expand All @@ -42,7 +40,6 @@ public class WebSocketHandler extends TextWebSocketHandler {
private static final String ROLE_KEY = "role";
private final ObjectMapper objectMapper = new ObjectMapper();
private final QuizRepository quizRepository;
private final EducationService educationService;

@Override
public void afterConnectionEstablished(WebSocketSession session) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public void saveKingMember(Long educationId) {
.map(member -> KingMember.of(member, education))
.toList();

saveKingMembers(kingMembers);
kingMemberRepository.saveAll(kingMembers);
saveWinnerIfKingMemberIsOne(education);
}

Expand All @@ -76,10 +76,6 @@ private List<Member> findKingMembers(List<Scorer> scorers) {
.toList();
}

private void saveKingMembers(List<KingMember> kingMembers) {
kingMemberRepository.saveAll(kingMembers);
}

private void saveWinnerIfKingMemberIsOne(Education education) {
List<KingMember> kingMembers = kingMemberRepository.findAllByEducation(education);
if (kingMembers.size() == 1) {
Expand All @@ -96,7 +92,7 @@ public void sendKingCommand(Long educationId) {
@Transactional
public void calculateWinner(Long educationId) {
Education education = findEducationById(educationId);
if (isWinnerExist(education)) {
if (winnerRepository.existsByEducation(education)) {
throw new AppException(ErrorCode.WINNER_EXIST);
}

Expand All @@ -118,13 +114,9 @@ public void saveWinner(final Long memberId, final Education education) {
winnerRepository.save(winner);
}

public boolean isWinnerExist(Education education) {
return winnerRepository.existsByEducation(education);
}

private Education findEducationById(Long educationId) {
return educationRepository.findById(educationId)
.orElseThrow(() -> new AppException(ErrorCode.ENTITY_NOT_FOUND));
.orElseThrow(() -> new EntityNotFoundException("해당 교육 id:" + educationId + " 찾다가 에러 발생했습니다."));
}

private void checkKingMemberExist(Education education) {
Expand Down

0 comments on commit bdd3775

Please sign in to comment.