11package com .example .solidconnection .application .service ;
22
33import com .example .solidconnection .application .domain .Application ;
4+ import com .example .solidconnection .application .dto .ApplicationSubmissionResponse ;
45import com .example .solidconnection .application .dto .ApplyRequest ;
56import com .example .solidconnection .application .dto .UniversityChoiceRequest ;
67import com .example .solidconnection .application .repository .ApplicationRepository ;
@@ -49,15 +50,10 @@ public class ApplicationSubmissionService {
4950 key = {"applications:all" },
5051 cacheManager = "customCacheManager"
5152 )
52- public boolean apply (SiteUser siteUser , ApplyRequest applyRequest ) {
53+ public ApplicationSubmissionResponse apply (SiteUser siteUser , ApplyRequest applyRequest ) {
5354 UniversityChoiceRequest universityChoiceRequest = applyRequest .universityChoiceRequest ();
54-
55- Long gpaScoreId = applyRequest .gpaScoreId ();
56- Long languageTestScoreId = applyRequest .languageTestScoreId ();
57- GpaScore gpaScore = getValidGpaScore (siteUser , gpaScoreId );
58- LanguageTestScore languageTestScore = getValidLanguageTestScore (siteUser , languageTestScoreId );
59-
60- Optional <Application > application = applicationRepository .findBySiteUserAndTerm (siteUser , term );
55+ GpaScore gpaScore = getValidGpaScore (siteUser , applyRequest .gpaScoreId ());
56+ LanguageTestScore languageTestScore = getValidLanguageTestScore (siteUser , applyRequest .languageTestScoreId ());
6157
6258 UniversityInfoForApply firstChoiceUniversity = universityInfoForApplyRepository
6359 .getUniversityInfoForApplyByIdAndTerm (universityChoiceRequest .firstChoiceUniversityId (), term );
@@ -68,22 +64,19 @@ public boolean apply(SiteUser siteUser, ApplyRequest applyRequest) {
6864 .map (id -> universityInfoForApplyRepository .getUniversityInfoForApplyByIdAndTerm (id , term ))
6965 .orElse (null );
7066
71- if (application .isEmpty ()) {
72- Application newApplication = new Application (siteUser , gpaScore .getGpa (), languageTestScore .getLanguageTest (),
73- term , firstChoiceUniversity , secondChoiceUniversity , thirdChoiceUniversity , getRandomNickname ());
74- newApplication .setVerifyStatus (VerifyStatus .APPROVED );
75- applicationRepository .save (newApplication );
76- } else {
77- Application before = application .get ();
78- validateUpdateLimitNotExceed (before );
79- before .setIsDeleteTrue (); // 기존 이력 soft delete 수행한다.
80-
81- Application newApplication = new Application (siteUser , gpaScore .getGpa (), languageTestScore .getLanguageTest (),
82- term , before .getUpdateCount () + 1 , firstChoiceUniversity , secondChoiceUniversity , thirdChoiceUniversity , getRandomNickname ());
83- newApplication .setVerifyStatus (VerifyStatus .APPROVED );
84- applicationRepository .save (newApplication );
85- }
86- return true ;
67+ Optional <Application > existingApplication = applicationRepository .findBySiteUserAndTerm (siteUser , term );
68+ int updateCount = existingApplication
69+ .map (application -> {
70+ validateUpdateLimitNotExceed (application );
71+ application .setIsDeleteTrue ();
72+ return application .getUpdateCount () + 1 ;
73+ })
74+ .orElse (1 );
75+ Application newApplication = new Application (siteUser , gpaScore .getGpa (), languageTestScore .getLanguageTest (),
76+ term , updateCount , firstChoiceUniversity , secondChoiceUniversity , thirdChoiceUniversity , getRandomNickname ());
77+ newApplication .setVerifyStatus (VerifyStatus .APPROVED );
78+ applicationRepository .save (newApplication );
79+ return ApplicationSubmissionResponse .from (newApplication );
8780 }
8881
8982 private GpaScore getValidGpaScore (SiteUser siteUser , Long gpaScoreId ) {
0 commit comments