fix(be): handle contest submissions without judgeable testcases - #3669
fix(be): handle contest submissions without judgeable testcases#3669dlwnsgk529 wants to merge 4 commits into
Conversation
채점 대상 테스트 케이스가 없는 경우 제출을 Accepted로 분기 처리한다. SubmissionResult와 RabbitMQ 채점 요청을 생성하지 않아 Judging 상태로 남는 문제를 방지한다.
채점 대상 테스트케이스가 없는 대회 제출을 정답과 만점으로 확정한다. RabbitMQ 채점 요청 없이 기존 문제 통계 및 대회 기록 후속 처리를 실행한다. 예외 처리 분기가 추후에 깨지는 것을 방지하기 위한 테스트를 추가한다.
기획의 문제인 것 같은데, 개인적으로 정답으로 간주하는 것이 맞다고 생각합니다. |
리뷰 —
|
저도 정답으로 간주하는 것이 맞다고 봅니다! |
| submission: Submission, | ||
| judgeOnlyHiddenTestcases: boolean | ||
| ): Promise<void> { | ||
| ): Promise<number> { |
There was a problem hiding this comment.
createSubmissionResults에서 이미 테스트케이스를 조회하고 있으므로, 추가적인 DB 접근 없이 해당 정보를 호출부에 전달하려는 방향에는 동의합니다.
다만 현재 메서드는 이름상 SubmissionResult를 생성하는 역할로 보이지만, 실제로는 채점 대상 테스트케이스를 조회하고 선별한 뒤 그 개수까지 반환하고 있어 책임이 다소 섞여 있는 것 같습니다.
테스트케이스를 조회하고 채점 대상을 결정하는 로직을 별도의 메서드로 분리한 뒤, 그 결과를 createSubmissionResults에 전달하는 구조는 어떨까요? 그러면 호출부에서도 이미 조회된 테스트케이스의 개수를 활용할 수 있어 추가 DB 접근은 발생하지 않으면서, 각 메서드의 역할도 더 명확해질 것 같습니다.
| submission.contestId && | ||
| judgeOnlyHiddenTestcases |
Description
Evaluate with sample testcases included옵션을 끈 대회에 샘플 테스트케이스만 존재하는 문제가 포함된 경우,채점할 테스트케이스가 없어 제출이
Judging상태에 계속 머무르는 문제를 수정합니다.채점 대상 테스트케이스가 없는 대회 제출은 RabbitMQ 채점 요청을 발행하지 않고
기존 제출 결과 후속 처리 로직을 호출하여
Accepted및 만점으로 확정합니다.이후 문제 정답 통계와 대회 참가자 기록도 기존 정답 제출과 동일하게 갱신합니다.
구현한 내용은 다음과 같습니다.
SubmissionResult개수를 반환하도록 제출 결과 생성 로직을 변경Accepted, 만점으로 한 번에 저장Additional context
현재 구현은 채점 대상 히든 테스트케이스가 없으면 코드를 실행하지 않고 제출을
Accepted및 만점으로 처리합니다. 따라서 오답이나 컴파일되지 않는 코드도 정답으로처리될 수 있습니다.
채점 대상이 없는 제출을 정답으로 간주하는 것이 적절한지 확인 부탁드립니다.
closes TAS-2796
Before submitting the PR, please make sure you do the following
fixes #123).