From 996d0ff8bdbde1862e9a7882ef51842c2b9ab9b2 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Thu, 20 Feb 2025 15:02:47 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=EC=A7=80=EC=9B=90=EC=84=9C=20?= =?UTF-8?q?=EC=A0=9C=EC=B6=9C=20=EC=8B=9C=20=EC=9D=91=EB=8B=B5=EC=97=90=20?= =?UTF-8?q?=EC=A7=80=EC=9B=90=20=ED=9A=9F=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/controller/ApplicationController.java | 4 ++-- .../application/dto/ApplicationSubmissionResponse.java | 9 ++++++++- .../service/ApplicationSubmissionService.java | 6 ++++-- .../service/ApplicationSubmissionServiceTest.java | 6 +++--- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/example/solidconnection/application/controller/ApplicationController.java b/src/main/java/com/example/solidconnection/application/controller/ApplicationController.java index 892597e90..801cbf10c 100644 --- a/src/main/java/com/example/solidconnection/application/controller/ApplicationController.java +++ b/src/main/java/com/example/solidconnection/application/controller/ApplicationController.java @@ -32,10 +32,10 @@ public ResponseEntity apply( @AuthorizedUser SiteUser siteUser, @Valid @RequestBody ApplyRequest applyRequest ) { - boolean result = applicationSubmissionService.apply(siteUser, applyRequest); + ApplicationSubmissionResponse applicationSubmissionResponse = applicationSubmissionService.apply(siteUser, applyRequest); return ResponseEntity .status(HttpStatus.OK) - .body(new ApplicationSubmissionResponse(result)); + .body(applicationSubmissionResponse); } @GetMapping diff --git a/src/main/java/com/example/solidconnection/application/dto/ApplicationSubmissionResponse.java b/src/main/java/com/example/solidconnection/application/dto/ApplicationSubmissionResponse.java index 4f353733b..62438f78d 100644 --- a/src/main/java/com/example/solidconnection/application/dto/ApplicationSubmissionResponse.java +++ b/src/main/java/com/example/solidconnection/application/dto/ApplicationSubmissionResponse.java @@ -1,5 +1,12 @@ package com.example.solidconnection.application.dto; +import com.example.solidconnection.application.domain.Application; + public record ApplicationSubmissionResponse( - boolean isSuccess) { + int applyCount +) { + // 지원횟수는 1회부터 시작하므로 1을 더해줌 + public static ApplicationSubmissionResponse from(Application application) { + return new ApplicationSubmissionResponse(application.getUpdateCount() + 1); + } } diff --git a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java index dfc455146..4eb0e811d 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java @@ -1,6 +1,7 @@ package com.example.solidconnection.application.service; import com.example.solidconnection.application.domain.Application; +import com.example.solidconnection.application.dto.ApplicationSubmissionResponse; import com.example.solidconnection.application.dto.ApplyRequest; import com.example.solidconnection.application.dto.UniversityChoiceRequest; import com.example.solidconnection.application.repository.ApplicationRepository; @@ -49,7 +50,7 @@ public class ApplicationSubmissionService { key = {"applications:all"}, cacheManager = "customCacheManager" ) - public boolean apply(SiteUser siteUser, ApplyRequest applyRequest) { + public ApplicationSubmissionResponse apply(SiteUser siteUser, ApplyRequest applyRequest) { UniversityChoiceRequest universityChoiceRequest = applyRequest.universityChoiceRequest(); Long gpaScoreId = applyRequest.gpaScoreId(); @@ -73,6 +74,7 @@ public boolean apply(SiteUser siteUser, ApplyRequest applyRequest) { term, firstChoiceUniversity, secondChoiceUniversity, thirdChoiceUniversity, getRandomNickname()); newApplication.setVerifyStatus(VerifyStatus.APPROVED); applicationRepository.save(newApplication); + return ApplicationSubmissionResponse.from(newApplication); } else { Application before = application.get(); validateUpdateLimitNotExceed(before); @@ -82,8 +84,8 @@ public boolean apply(SiteUser siteUser, ApplyRequest applyRequest) { term, before.getUpdateCount() + 1, firstChoiceUniversity, secondChoiceUniversity, thirdChoiceUniversity, getRandomNickname()); newApplication.setVerifyStatus(VerifyStatus.APPROVED); applicationRepository.save(newApplication); + return ApplicationSubmissionResponse.from(newApplication); } - return true; } private GpaScore getValidGpaScore(SiteUser siteUser, Long gpaScoreId) { diff --git a/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java b/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java index ffd3818ce..a162d5ea0 100644 --- a/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java +++ b/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java @@ -3,6 +3,7 @@ import com.example.solidconnection.application.domain.Application; import com.example.solidconnection.application.domain.Gpa; import com.example.solidconnection.application.domain.LanguageTest; +import com.example.solidconnection.application.dto.ApplicationSubmissionResponse; import com.example.solidconnection.application.dto.ApplyRequest; import com.example.solidconnection.application.dto.UniversityChoiceRequest; import com.example.solidconnection.application.repository.ApplicationRepository; @@ -21,7 +22,6 @@ import static com.example.solidconnection.application.service.ApplicationSubmissionService.APPLICATION_UPDATE_COUNT_LIMIT; import static com.example.solidconnection.custom.exception.ErrorCode.APPLY_UPDATE_LIMIT_EXCEED; -import static com.example.solidconnection.custom.exception.ErrorCode.CANT_APPLY_FOR_SAME_UNIVERSITY; import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_GPA_SCORE_STATUS; import static com.example.solidconnection.custom.exception.ErrorCode.INVALID_LANGUAGE_TEST_SCORE_STATUS; import static org.assertj.core.api.Assertions.assertThat; @@ -56,12 +56,12 @@ class ApplicationSubmissionServiceTest extends BaseIntegrationTest { ApplyRequest request = new ApplyRequest(gpaScore.getId(), languageTestScore.getId(), universityChoiceRequest); // when - boolean result = applicationSubmissionService.apply(테스트유저_1, request); + ApplicationSubmissionResponse response = applicationSubmissionService.apply(테스트유저_1, request); // then Application savedApplication = applicationRepository.findBySiteUserAndTerm(테스트유저_1, term).orElseThrow(); assertAll( - () -> assertThat(result).isTrue(), + () -> assertThat(response.applyCount()).isEqualTo(savedApplication.getUpdateCount() + 1), () -> assertThat(savedApplication.getGpa()).isEqualTo(gpaScore.getGpa()), () -> assertThat(savedApplication.getLanguageTest()).isEqualTo(languageTestScore.getLanguageTest()), () -> assertThat(savedApplication.getVerifyStatus()).isEqualTo(VerifyStatus.APPROVED), From 043b5028af7c425e8f6d2e907329001cf7887bdf Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Thu, 20 Feb 2025 15:43:13 +0900 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20=EC=A7=80=EC=9B=90=EC=84=9C=20?= =?UTF-8?q?=EC=A0=9C=EC=B6=9C=20=EC=B5=9C=EB=8C=80=20=ED=9A=9F=EC=88=98=20?= =?UTF-8?q?3=EB=B2=88=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/application/domain/Application.java | 6 +++--- .../application/dto/ApplicationSubmissionResponse.java | 3 +-- .../db/migration/V8__change_update_count_default_value.sql | 2 ++ .../service/ApplicationSubmissionServiceTest.java | 5 ++--- 4 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 src/main/resources/db/migration/V8__change_update_count_default_value.sql diff --git a/src/main/java/com/example/solidconnection/application/domain/Application.java b/src/main/java/com/example/solidconnection/application/domain/Application.java index 61dc5159e..6caa75331 100644 --- a/src/main/java/com/example/solidconnection/application/domain/Application.java +++ b/src/main/java/com/example/solidconnection/application/domain/Application.java @@ -46,7 +46,7 @@ public class Application { @Column(length = 100) private String nicknameForApply; - @Column(columnDefinition = "int not null default 0") + @Column(columnDefinition = "int not null default 1") private Integer updateCount; @Column(length = 50, nullable = false) @@ -76,7 +76,7 @@ public Application( this.gpa = gpa; this.languageTest = languageTest; this.term = term; - this.updateCount = 0; + this.updateCount = 1; this.verifyStatus = PENDING; } @@ -115,7 +115,7 @@ public Application( this.gpa = gpa; this.languageTest = languageTest; this.term = term; - this.updateCount = 0; + this.updateCount = 1; this.firstChoiceUniversity = firstChoiceUniversity; this.secondChoiceUniversity = secondChoiceUniversity; this.thirdChoiceUniversity = thirdChoiceUniversity; diff --git a/src/main/java/com/example/solidconnection/application/dto/ApplicationSubmissionResponse.java b/src/main/java/com/example/solidconnection/application/dto/ApplicationSubmissionResponse.java index 62438f78d..e90994c37 100644 --- a/src/main/java/com/example/solidconnection/application/dto/ApplicationSubmissionResponse.java +++ b/src/main/java/com/example/solidconnection/application/dto/ApplicationSubmissionResponse.java @@ -5,8 +5,7 @@ public record ApplicationSubmissionResponse( int applyCount ) { - // 지원횟수는 1회부터 시작하므로 1을 더해줌 public static ApplicationSubmissionResponse from(Application application) { - return new ApplicationSubmissionResponse(application.getUpdateCount() + 1); + return new ApplicationSubmissionResponse(application.getUpdateCount()); } } diff --git a/src/main/resources/db/migration/V8__change_update_count_default_value.sql b/src/main/resources/db/migration/V8__change_update_count_default_value.sql new file mode 100644 index 000000000..fa1124f03 --- /dev/null +++ b/src/main/resources/db/migration/V8__change_update_count_default_value.sql @@ -0,0 +1,2 @@ +ALTER TABLE application + ALTER COLUMN update_count SET DEFAULT 1; \ No newline at end of file diff --git a/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java b/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java index a162d5ea0..f4f442840 100644 --- a/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java +++ b/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java @@ -61,12 +61,11 @@ class ApplicationSubmissionServiceTest extends BaseIntegrationTest { // then Application savedApplication = applicationRepository.findBySiteUserAndTerm(테스트유저_1, term).orElseThrow(); assertAll( - () -> assertThat(response.applyCount()).isEqualTo(savedApplication.getUpdateCount() + 1), + () -> assertThat(response.applyCount()).isEqualTo(savedApplication.getUpdateCount()), () -> assertThat(savedApplication.getGpa()).isEqualTo(gpaScore.getGpa()), () -> assertThat(savedApplication.getLanguageTest()).isEqualTo(languageTestScore.getLanguageTest()), () -> assertThat(savedApplication.getVerifyStatus()).isEqualTo(VerifyStatus.APPROVED), () -> assertThat(savedApplication.getNicknameForApply()).isNotNull(), - () -> assertThat(savedApplication.getUpdateCount()).isZero(), () -> assertThat(savedApplication.getTerm()).isEqualTo(term), () -> assertThat(savedApplication.isDelete()).isFalse(), () -> assertThat(savedApplication.getFirstChoiceUniversity().getId()).isEqualTo(괌대학_A_지원_정보.getId()), @@ -128,7 +127,7 @@ class ApplicationSubmissionServiceTest extends BaseIntegrationTest { ); ApplyRequest request = new ApplyRequest(gpaScore.getId(), languageTestScore.getId(), universityChoiceRequest); - for (int i = 0; i < APPLICATION_UPDATE_COUNT_LIMIT + 1; i++) { + for (int i = 0; i < APPLICATION_UPDATE_COUNT_LIMIT; i++) { applicationSubmissionService.apply(테스트유저_1, request); } From 0d411f0bb31f178268eec681d46eac1e5576e066 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Thu, 20 Feb 2025 15:53:15 +0900 Subject: [PATCH 3/5] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=A1=B0=EA=B1=B4=EB=AC=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ApplicationSubmissionService.java | 39 +++++++------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java index 4eb0e811d..432e93aff 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java @@ -52,13 +52,8 @@ public class ApplicationSubmissionService { ) public ApplicationSubmissionResponse apply(SiteUser siteUser, ApplyRequest applyRequest) { UniversityChoiceRequest universityChoiceRequest = applyRequest.universityChoiceRequest(); - - Long gpaScoreId = applyRequest.gpaScoreId(); - Long languageTestScoreId = applyRequest.languageTestScoreId(); - GpaScore gpaScore = getValidGpaScore(siteUser, gpaScoreId); - LanguageTestScore languageTestScore = getValidLanguageTestScore(siteUser, languageTestScoreId); - - Optional application = applicationRepository.findBySiteUserAndTerm(siteUser, term); + GpaScore gpaScore = getValidGpaScore(siteUser, applyRequest.gpaScoreId()); + LanguageTestScore languageTestScore = getValidLanguageTestScore(siteUser, applyRequest.languageTestScoreId()); UniversityInfoForApply firstChoiceUniversity = universityInfoForApplyRepository .getUniversityInfoForApplyByIdAndTerm(universityChoiceRequest.firstChoiceUniversityId(), term); @@ -69,23 +64,19 @@ public ApplicationSubmissionResponse apply(SiteUser siteUser, ApplyRequest apply .map(id -> universityInfoForApplyRepository.getUniversityInfoForApplyByIdAndTerm(id, term)) .orElse(null); - if (application.isEmpty()) { - Application newApplication = new Application(siteUser, gpaScore.getGpa(), languageTestScore.getLanguageTest(), - term, firstChoiceUniversity, secondChoiceUniversity, thirdChoiceUniversity, getRandomNickname()); - newApplication.setVerifyStatus(VerifyStatus.APPROVED); - applicationRepository.save(newApplication); - return ApplicationSubmissionResponse.from(newApplication); - } else { - Application before = application.get(); - validateUpdateLimitNotExceed(before); - before.setIsDeleteTrue(); // 기존 이력 soft delete 수행한다. - - Application newApplication = new Application(siteUser, gpaScore.getGpa(), languageTestScore.getLanguageTest(), - term, before.getUpdateCount() + 1, firstChoiceUniversity, secondChoiceUniversity, thirdChoiceUniversity, getRandomNickname()); - newApplication.setVerifyStatus(VerifyStatus.APPROVED); - applicationRepository.save(newApplication); - return ApplicationSubmissionResponse.from(newApplication); - } + Optional existingApplication = applicationRepository.findBySiteUserAndTerm(siteUser, term); + int updateCount = existingApplication + .map(application -> { + validateUpdateLimitNotExceed(application); + application.setIsDeleteTrue(); + return application.getUpdateCount() + 1; + }) + .orElse(1); + Application newApplication = new Application(siteUser, gpaScore.getGpa(), languageTestScore.getLanguageTest(), + term, updateCount, firstChoiceUniversity, secondChoiceUniversity, thirdChoiceUniversity, getRandomNickname()); + newApplication.setVerifyStatus(VerifyStatus.APPROVED); + applicationRepository.save(newApplication); + return ApplicationSubmissionResponse.from(newApplication); } private GpaScore getValidGpaScore(SiteUser siteUser, Long gpaScoreId) { From 7805518ab5c6474341e19f3a1e811f66010adb20 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Thu, 20 Feb 2025 16:35:41 +0900 Subject: [PATCH 4/5] =?UTF-8?q?fix:=20V8=20->=20V10=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...fault_value.sql => V10__change_update_count_default_value.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V8__change_update_count_default_value.sql => V10__change_update_count_default_value.sql} (100%) diff --git a/src/main/resources/db/migration/V8__change_update_count_default_value.sql b/src/main/resources/db/migration/V10__change_update_count_default_value.sql similarity index 100% rename from src/main/resources/db/migration/V8__change_update_count_default_value.sql rename to src/main/resources/db/migration/V10__change_update_count_default_value.sql From 351f969f6f9c6c42633d901380ddfaaab615ea35 Mon Sep 17 00:00:00 2001 From: Gyuhyeok99 <126947828+Gyuhyeok99@users.noreply.github.com> Date: Thu, 20 Feb 2025 17:52:29 +0900 Subject: [PATCH 5/5] =?UTF-8?q?style:=20=EA=B0=9C=ED=96=89=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/migration/V10__change_update_count_default_value.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/db/migration/V10__change_update_count_default_value.sql b/src/main/resources/db/migration/V10__change_update_count_default_value.sql index fa1124f03..20327b96e 100644 --- a/src/main/resources/db/migration/V10__change_update_count_default_value.sql +++ b/src/main/resources/db/migration/V10__change_update_count_default_value.sql @@ -1,2 +1,2 @@ ALTER TABLE application - ALTER COLUMN update_count SET DEFAULT 1; \ No newline at end of file + ALTER COLUMN update_count SET DEFAULT 1;