Skip to content

Commit 2ce16d7

Browse files
authored
feature / refactor : 채점 시스템 SSE → WebSocket 기반으로 전환 (#98)
* feat : WebSocket 관련 클래스, 메서드, DTO 추가 * refactor : WebSocket으로 채점 시스템 전환
1 parent 735bf5d commit 2ce16d7

File tree

44 files changed

+673
-430
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+673
-430
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.ezcode.codetest.application.submission.dto.event;
2+
3+
import org.ezcode.codetest.domain.submission.exception.SubmissionException;
4+
import org.ezcode.codetest.domain.submission.exception.code.SubmissionExceptionCode;
5+
6+
public record SubmissionErrorEvent(
7+
8+
String sessionKey,
9+
10+
SubmissionExceptionCode code
11+
12+
) {
13+
public SubmissionErrorEvent(String sessionKey, Throwable t) {
14+
this(sessionKey, resolveCode(t));
15+
}
16+
17+
private static SubmissionExceptionCode resolveCode(Throwable t) {
18+
if (t instanceof SubmissionException se) {
19+
return (SubmissionExceptionCode) se.getResponseCode();
20+
}
21+
return SubmissionExceptionCode.UNKNOWN_ERROR;
22+
}
23+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.ezcode.codetest.application.submission.dto.event;
2+
3+
import org.ezcode.codetest.application.submission.dto.event.payload.SubmissionFinalResultPayload;
4+
5+
public record SubmissionJudgingFinishedEvent(
6+
7+
String sessionKey,
8+
9+
SubmissionFinalResultPayload payload
10+
11+
) {
12+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.ezcode.codetest.application.submission.dto.event;
2+
3+
import org.ezcode.codetest.application.submission.dto.event.payload.TestcaseResultPayload;
4+
5+
public record TestcaseEvaluatedEvent(
6+
7+
String sessionKey,
8+
9+
TestcaseResultPayload payload
10+
11+
) {
12+
public static TestcaseEvaluatedEvent of(String sessionKey, TestcaseResultPayload payload) {
13+
return new TestcaseEvaluatedEvent(
14+
sessionKey,
15+
payload
16+
);
17+
}
18+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.ezcode.codetest.application.submission.dto.event;
2+
3+
import java.util.List;
4+
5+
import org.ezcode.codetest.application.submission.dto.event.payload.InitTestcaseListPayload;
6+
7+
public record TestcaseListInitializedEvent(
8+
9+
String sessionKey,
10+
11+
List<InitTestcaseListPayload> payload
12+
13+
) {
14+
public static TestcaseListInitializedEvent from(String sessionKey, List<InitTestcaseListPayload> payload) {
15+
return new TestcaseListInitializedEvent(sessionKey, payload);
16+
}
17+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.ezcode.codetest.application.submission.dto.event.payload;
2+
3+
import java.util.List;
4+
import java.util.stream.IntStream;
5+
6+
import org.ezcode.codetest.domain.problem.model.ProblemInfo;
7+
import org.ezcode.codetest.domain.problem.model.entity.Testcase;
8+
9+
public record InitTestcaseListPayload(
10+
11+
int seqId,
12+
13+
String input,
14+
15+
String expectedOutput,
16+
17+
String status
18+
19+
) {
20+
public static List<InitTestcaseListPayload> from(ProblemInfo info) {
21+
return IntStream.rangeClosed(1, info.getTestcaseCount())
22+
.mapToObj(seq -> {
23+
Testcase tc = info.testcaseList().get(seq - 1);
24+
return new InitTestcaseListPayload(
25+
seq,
26+
tc.getInput(),
27+
tc.getOutput(),
28+
"채점 중"
29+
);
30+
})
31+
.toList();
32+
}
33+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.ezcode.codetest.application.submission.dto.event.payload;
2+
3+
import lombok.Getter;
4+
5+
@Getter
6+
public class SubmissionFinalResultPayload {
7+
8+
private final int totalCount;
9+
10+
private final int passedCount;
11+
12+
private final boolean isCorrect;
13+
14+
private final String message;
15+
16+
public SubmissionFinalResultPayload(int totalCount, int passedCount, String message) {
17+
this.totalCount = totalCount;
18+
this.passedCount = passedCount;
19+
this.isCorrect = totalCount == passedCount;
20+
this.message = message;
21+
}
22+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.ezcode.codetest.application.submission.dto.event.payload;
2+
3+
import org.ezcode.codetest.application.submission.model.JudgeResult;
4+
import org.ezcode.codetest.domain.submission.dto.AnswerEvaluation;
5+
6+
public record TestcaseResultPayload(
7+
8+
int seqId,
9+
10+
boolean isPassed,
11+
12+
String actualOutput,
13+
14+
long executionTime,
15+
16+
long memoryUsage,
17+
18+
String message
19+
20+
) {
21+
public static TestcaseResultPayload fromEvaluation(int seqId, JudgeResult result, AnswerEvaluation evaluation) {
22+
return new TestcaseResultPayload(
23+
seqId,
24+
evaluation.isPassed(),
25+
result.actualOutput(),
26+
result.executionTime(),
27+
result.memoryUsage(),
28+
result.message());
29+
}
30+
}

src/main/java/org/ezcode/codetest/application/submission/dto/response/submission/FinalResultResponse.java

Lines changed: 0 additions & 28 deletions
This file was deleted.

src/main/java/org/ezcode/codetest/application/submission/dto/response/submission/JudgeResultResponse.java

Lines changed: 0 additions & 41 deletions
This file was deleted.

src/main/java/org/ezcode/codetest/application/submission/dto/response/submission/SubmissionDetailResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public record SubmissionDetailResponse(
2222
String message,
2323

2424
@Schema(description = "실행 시간 (s)", example = "0.129")
25-
Double executionTime,
25+
Long executionTime,
2626

2727
@Schema(description = "메모리 사용량 (KB)", example = "12196")
2828
Long memoryUsage,

0 commit comments

Comments
 (0)