From 8f467280d29b8e7ea3c0314498ce186a49e52d7d Mon Sep 17 00:00:00 2001 From: hyoguoo Date: Fri, 15 Mar 2024 00:26:10 +0900 Subject: [PATCH 1/7] =?UTF-8?q?fix=20#119:=20Room=20List=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=8B=9C=20=EC=96=B8=EC=96=B4=20=ED=95=84=ED=84=B0?= =?UTF-8?q?=EB=A7=81=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/room/domain/RoomRepositoryQueryImpl.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/ei/algobaroapi/domain/room/domain/RoomRepositoryQueryImpl.java b/src/main/java/ei/algobaroapi/domain/room/domain/RoomRepositoryQueryImpl.java index 758e4d7..ede0a9d 100644 --- a/src/main/java/ei/algobaroapi/domain/room/domain/RoomRepositoryQueryImpl.java +++ b/src/main/java/ei/algobaroapi/domain/room/domain/RoomRepositoryQueryImpl.java @@ -86,10 +86,16 @@ private BooleanExpression languageContains(List languages) { BooleanExpression languageCondition = null; for (String language : languages) { + String languageWithQuotation = "\"" + language + "\""; + BooleanExpression languageContainsExpression = template.containsIgnoreCase( + languageWithQuotation + ); if (languageCondition == null) { - languageCondition = template.containsIgnoreCase(language); + languageCondition = languageContainsExpression; } else { - languageCondition = languageCondition.or(template.containsIgnoreCase(language)); + languageCondition = languageCondition.or( + languageContainsExpression + ); } } From 2972373cb7c9164108b3fe74342e910627cdb8c1 Mon Sep 17 00:00:00 2001 From: hyoguoo Date: Fri, 15 Mar 2024 00:26:35 +0900 Subject: [PATCH 2/7] =?UTF-8?q?mod=20#119:=20Room=20List=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=8B=9C=200=EB=AA=85=EC=9D=B8=20=EB=B0=A9=20?= =?UTF-8?q?=EB=85=B8=EC=B6=9C=EB=90=98=EC=A7=80=20=EC=95=8A=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/room/domain/RoomRepositoryQueryImpl.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/ei/algobaroapi/domain/room/domain/RoomRepositoryQueryImpl.java b/src/main/java/ei/algobaroapi/domain/room/domain/RoomRepositoryQueryImpl.java index ede0a9d..c6d4112 100644 --- a/src/main/java/ei/algobaroapi/domain/room/domain/RoomRepositoryQueryImpl.java +++ b/src/main/java/ei/algobaroapi/domain/room/domain/RoomRepositoryQueryImpl.java @@ -32,6 +32,7 @@ public Page findListPage(RoomListRequestDto request, Pageable pageable) { .and(titleContainsIgnoreCase(request.getSearchTitle())) .and(roomStatusEq(request.getRoomStatus())) .and(roomAccessTypeEq(request.getRoomAccessType())) + .and(roomMemberNotZero()) .and(languageContains(request.getLanguages())); List content = jpaQueryFactory @@ -76,6 +77,10 @@ private BooleanExpression roomAccessTypeEq(RoomAccessType roomAccessType) { } } + private BooleanExpression roomMemberNotZero() { + return room.roomMembers.size().gt(0); + } + private BooleanExpression languageContains(List languages) { if (languages == null || languages.isEmpty()) { return null; From c611cdb62dae8c6401135ca650aca1469eb87901 Mon Sep 17 00:00:00 2001 From: kimnamgyu Date: Fri, 15 Mar 2024 14:28:03 +0900 Subject: [PATCH 3/7] =?UTF-8?q?feat=20#123:=20Jdoodle=20API=20=ED=98=B8?= =?UTF-8?q?=EC=B6=9C=20=EC=8B=9C=20=EB=B0=9C=EC=83=9D=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../compile/exception/JdoodleException.java | 20 +++++++++++++++ .../exception/common/CompileErrorCode.java | 14 +++++++++++ .../common/CompileExceptionHandler.java | 25 +++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 src/main/java/ei/algobaroapi/domain/compile/exception/JdoodleException.java create mode 100644 src/main/java/ei/algobaroapi/domain/compile/exception/common/CompileErrorCode.java create mode 100644 src/main/java/ei/algobaroapi/domain/compile/exception/common/CompileExceptionHandler.java diff --git a/src/main/java/ei/algobaroapi/domain/compile/exception/JdoodleException.java b/src/main/java/ei/algobaroapi/domain/compile/exception/JdoodleException.java new file mode 100644 index 0000000..2635b04 --- /dev/null +++ b/src/main/java/ei/algobaroapi/domain/compile/exception/JdoodleException.java @@ -0,0 +1,20 @@ +package ei.algobaroapi.domain.compile.exception; + +import ei.algobaroapi.domain.compile.exception.common.CompileErrorCode; +import lombok.Getter; + +@Getter +public class JdoodleException extends RuntimeException { + + private final String errorCode; + private final String errorMessage; + + private JdoodleException(CompileErrorCode errorCode) { + this.errorCode = errorCode.getErrorCode(); + this.errorMessage = errorCode.getErrorMessage(); + } + + public static JdoodleException of(CompileErrorCode errorCode) { + return new JdoodleException(errorCode); + } +} diff --git a/src/main/java/ei/algobaroapi/domain/compile/exception/common/CompileErrorCode.java b/src/main/java/ei/algobaroapi/domain/compile/exception/common/CompileErrorCode.java new file mode 100644 index 0000000..b71b382 --- /dev/null +++ b/src/main/java/ei/algobaroapi/domain/compile/exception/common/CompileErrorCode.java @@ -0,0 +1,14 @@ +package ei.algobaroapi.domain.compile.exception.common; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum CompileErrorCode { + + JDOODLE_API_EXCEPTION("E07401", "Jdoodle API 호출 중 오류가 발생했습니다."); + + private final String errorCode; + private final String errorMessage; +} diff --git a/src/main/java/ei/algobaroapi/domain/compile/exception/common/CompileExceptionHandler.java b/src/main/java/ei/algobaroapi/domain/compile/exception/common/CompileExceptionHandler.java new file mode 100644 index 0000000..eceffe9 --- /dev/null +++ b/src/main/java/ei/algobaroapi/domain/compile/exception/common/CompileExceptionHandler.java @@ -0,0 +1,25 @@ +package ei.algobaroapi.domain.compile.exception.common; + +import ei.algobaroapi.domain.compile.exception.JdoodleException; +import ei.algobaroapi.global.response.message.ErrorResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@Slf4j +@RestControllerAdvice +public class CompileExceptionHandler { + + @ExceptionHandler(JdoodleException.class) + public ResponseEntity catchJdoodleException(JdoodleException e) { + log.error(e.getErrorCode()); + + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(ErrorResponse.of( + e.getErrorCode(), + e.getErrorMessage()) + ); + } +} From 234c4f8814f0400fa5e2337ab84d16afba5fa9ac Mon Sep 17 00:00:00 2001 From: kimnamgyu Date: Fri, 15 Mar 2024 14:28:10 +0900 Subject: [PATCH 4/7] =?UTF-8?q?docs=20#123:=20Jdoodle=20API=20=ED=98=B8?= =?UTF-8?q?=EC=B6=9C=20=EC=8B=9C=20=EB=B0=9C=EC=83=9D=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/config/swaggerdoc/CompileControllerDoc.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/ei/algobaroapi/global/config/swaggerdoc/CompileControllerDoc.java b/src/main/java/ei/algobaroapi/global/config/swaggerdoc/CompileControllerDoc.java index a47a4eb..048b646 100644 --- a/src/main/java/ei/algobaroapi/global/config/swaggerdoc/CompileControllerDoc.java +++ b/src/main/java/ei/algobaroapi/global/config/swaggerdoc/CompileControllerDoc.java @@ -13,5 +13,6 @@ public interface CompileControllerDoc { @Operation(summary = "코드 제출", description = "사용자가 제출한 코드를 컴파일합니다.") @ApiResponse(responseCode = "201", description = "코드 컴파일 성공") + @ApiResponse(responseCode = "E07401", description = "Jdoodle API 호출 중 오류가 발생했습니다.") CompileExecutionResponse compileCode(Member member, CompileExecutionRequest request); } From 3d45fd8ecd8f5cdfb5282e49ae2e69a97947d941 Mon Sep 17 00:00:00 2001 From: kimnamgyu Date: Fri, 15 Mar 2024 14:28:44 +0900 Subject: [PATCH 5/7] =?UTF-8?q?mod=20#123:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=8B=A4=ED=96=89=20=EC=9D=91=EB=8B=B5=20=EA=B2=B0=EA=B3=BC=20?= =?UTF-8?q?dto=EC=97=90=20=EC=84=B1=EA=B3=B5,=20=EC=8B=A4=ED=8C=A8=20?= =?UTF-8?q?=EB=82=98=EB=88=84=EC=96=B4=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/CompileExecutionResponse.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/ei/algobaroapi/domain/compile/dto/response/CompileExecutionResponse.java b/src/main/java/ei/algobaroapi/domain/compile/dto/response/CompileExecutionResponse.java index ce1750f..8bb9922 100644 --- a/src/main/java/ei/algobaroapi/domain/compile/dto/response/CompileExecutionResponse.java +++ b/src/main/java/ei/algobaroapi/domain/compile/dto/response/CompileExecutionResponse.java @@ -13,7 +13,14 @@ public class CompileExecutionResponse { @Schema(description = "코드 실행 결과", example = "3") private final String result; - public static CompileExecutionResponse of(String result) { - return new CompileExecutionResponse(result); + @Schema(description = "컴파일 성공 여부", example = "true") + private final boolean isCompileSuccess; + + public static CompileExecutionResponse success(String result) { + return new CompileExecutionResponse(result, true); + } + + public static CompileExecutionResponse failure() { + return new CompileExecutionResponse("Compile Fail", false); } } From 474175aa0f654e78b5fbd61f6bc9b4f385a0dc27 Mon Sep 17 00:00:00 2001 From: kimnamgyu Date: Fri, 15 Mar 2024 14:29:19 +0900 Subject: [PATCH 6/7] =?UTF-8?q?mod=20#123:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=8B=A4=ED=96=89=20=EB=A1=9C=EC=A7=81=20=EC=A4=91=20Jdoodle?= =?UTF-8?q?=20API=20=ED=98=B8=EC=B6=9C=20=EA=B4=80=EB=A0=A8=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/JdoodleCompileServiceImpl.java | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/main/java/ei/algobaroapi/domain/compile/service/JdoodleCompileServiceImpl.java b/src/main/java/ei/algobaroapi/domain/compile/service/JdoodleCompileServiceImpl.java index 68c63bf..e8e1021 100644 --- a/src/main/java/ei/algobaroapi/domain/compile/service/JdoodleCompileServiceImpl.java +++ b/src/main/java/ei/algobaroapi/domain/compile/service/JdoodleCompileServiceImpl.java @@ -4,6 +4,8 @@ import ei.algobaroapi.domain.compile.dto.request.JdoodleCompileRequest; import ei.algobaroapi.domain.compile.dto.response.CompileExecutionResponse; import ei.algobaroapi.domain.compile.dto.response.JdoodleCompileResponse; +import ei.algobaroapi.domain.compile.exception.JdoodleException; +import ei.algobaroapi.domain.compile.exception.common.CompileErrorCode; import ei.algobaroapi.global.util.HttpUtil; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; @@ -25,17 +27,26 @@ public class JdoodleCompileServiceImpl implements CompileService { @Override public CompileExecutionResponse executeCode(CompileExecutionRequest request) { - JdoodleCompileResponse jdoodleCompileResponse = sendJdoodleCompileRequest( - JdoodleCompileRequest.builder() - .clientId(clientId) - .clientSecret(clientSecret) - .stdin(request.getInput()) - .script(request.getCode()) - .language(request.getLanguage()) - .build() - ); + try { + JdoodleCompileResponse jdoodleCompileResponse = sendJdoodleCompileRequest( + JdoodleCompileRequest.builder() + .clientId(clientId) + .clientSecret(clientSecret) + .stdin(request.getInput()) + .script(request.getCode()) + .language(request.getLanguage()) + .build() + ); + + if (jdoodleCompileResponse.isCompileSuccess()) { + return CompileExecutionResponse.success(jdoodleCompileResponse.getOutput()); + } else { + return CompileExecutionResponse.failure(); + } - return CompileExecutionResponse.of(jdoodleCompileResponse.getOutput()); + } catch (Exception e) { + throw JdoodleException.of(CompileErrorCode.JDOODLE_API_EXCEPTION); + } } private JdoodleCompileResponse sendJdoodleCompileRequest(JdoodleCompileRequest request) { From 77c3e54ef95bc6afd448d092fba4a64263f34a4e Mon Sep 17 00:00:00 2001 From: kimnamgyu Date: Fri, 15 Mar 2024 14:30:14 +0900 Subject: [PATCH 7/7] =?UTF-8?q?feat=20#123:=20=EC=BB=B4=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=84=B1=EA=B3=B5=20=EC=97=AC=EB=B6=80=20=ED=99=95=EC=9D=B8?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/compile/dto/response/JdoodleCompileResponse.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/ei/algobaroapi/domain/compile/dto/response/JdoodleCompileResponse.java b/src/main/java/ei/algobaroapi/domain/compile/dto/response/JdoodleCompileResponse.java index 454b8df..6f0367e 100644 --- a/src/main/java/ei/algobaroapi/domain/compile/dto/response/JdoodleCompileResponse.java +++ b/src/main/java/ei/algobaroapi/domain/compile/dto/response/JdoodleCompileResponse.java @@ -31,4 +31,8 @@ public static JdoodleCompileResponse of( return new JdoodleCompileResponse(output, statusCode, memory, cpuTime, compilationStatus, projectKey); } + + public boolean isCompileSuccess() { + return statusCode == 200; + } }