11package com .example .solidconnection .application .service ;
22
33import static com .example .solidconnection .common .exception .ErrorCode .APPLICATION_NOT_APPROVED ;
4+ import static com .example .solidconnection .common .exception .ErrorCode .CURRENT_TERM_NOT_FOUND ;
45import static com .example .solidconnection .common .exception .ErrorCode .USER_NOT_FOUND ;
56
67import com .example .solidconnection .application .domain .Application ;
1112import com .example .solidconnection .common .exception .CustomException ;
1213import com .example .solidconnection .siteuser .domain .SiteUser ;
1314import com .example .solidconnection .siteuser .repository .SiteUserRepository ;
15+ import com .example .solidconnection .term .domain .Term ;
16+ import com .example .solidconnection .term .repository .TermRepository ;
1417import com .example .solidconnection .university .domain .UnivApplyInfo ;
1518import com .example .solidconnection .university .repository .UnivApplyInfoRepository ;
1619import com .example .solidconnection .university .repository .custom .UnivApplyInfoFilterRepositoryImpl ;
20+ import io .micrometer .common .util .StringUtils ;
1721import java .util .ArrayList ;
1822import java .util .HashMap ;
1923import java .util .List ;
2327import java .util .stream .Collectors ;
2428import java .util .stream .Stream ;
2529import lombok .RequiredArgsConstructor ;
26- import org .springframework .beans .factory .annotation .Value ;
2730import org .springframework .stereotype .Service ;
2831import org .springframework .transaction .annotation .Transactional ;
2932
@@ -35,25 +38,29 @@ public class ApplicationQueryService {
3538 private final UnivApplyInfoRepository univApplyInfoRepository ;
3639 private final UnivApplyInfoFilterRepositoryImpl universityFilterRepository ;
3740 private final SiteUserRepository siteUserRepository ;
38-
39- @ Value ("${university.term}" )
40- public String term ;
41+ private final TermRepository termRepository ;
4142
4243 // todo: 캐싱 정책 변경 시 수정 필요
4344 @ Transactional (readOnly = true )
4445 public ApplicationsResponse getApplicants (long siteUserId , String regionCode , String keyword ) {
4546 // 1. 대학 지원 정보 필터링 (regionCode, keyword)
4647 SiteUser siteUser = siteUserRepository .findById (siteUserId )
4748 .orElseThrow (() -> new CustomException (USER_NOT_FOUND ));
48- List <UnivApplyInfo > univApplyInfos = universityFilterRepository .findAllByRegionCodeAndKeywords (regionCode , List .of (keyword ));
49+ List <String > keywords = StringUtils .isNotBlank (keyword ) ? List .of (keyword ) : List .of ();
50+
51+ Term term = termRepository .findByIsCurrentTrue ()
52+ .orElseThrow (() -> new CustomException (CURRENT_TERM_NOT_FOUND ));
53+
54+ List <UnivApplyInfo > univApplyInfos = universityFilterRepository .findAllByRegionCodeAndKeywordsAndTermId (regionCode , keywords , term .getId ());
4955 if (univApplyInfos .isEmpty ()) {
5056 return new ApplicationsResponse (List .of (), List .of (), List .of ());
5157 }
58+
5259 // 2. 조건에 맞는 모든 Application 한 번에 조회
5360 List <Long > univApplyInfoIds = univApplyInfos .stream ()
5461 .map (UnivApplyInfo ::getId )
5562 .toList ();
56- List <Application > applications = applicationRepository .findAllByUnivApplyInfoIds (univApplyInfoIds , VerifyStatus .APPROVED , term );
63+ List <Application > applications = applicationRepository .findAllByUnivApplyInfoIds (univApplyInfoIds , VerifyStatus .APPROVED , term . getId () );
5764 // 3. 지원서 분류 및 DTO 변환
5865 return classifyApplicationsByChoice (univApplyInfos , applications , siteUser );
5966 }
@@ -62,7 +69,11 @@ public ApplicationsResponse getApplicants(long siteUserId, String regionCode, St
6269 public ApplicationsResponse getApplicantsByUserApplications (long siteUserId ) {
6370 SiteUser siteUser = siteUserRepository .findById (siteUserId )
6471 .orElseThrow (() -> new CustomException (USER_NOT_FOUND ));
65- Application userLatestApplication = applicationRepository .getApplicationBySiteUserIdAndTerm (siteUser .getId (), term );
72+
73+ Term term = termRepository .findByIsCurrentTrue ()
74+ .orElseThrow (() -> new CustomException (CURRENT_TERM_NOT_FOUND ));
75+
76+ Application userLatestApplication = applicationRepository .getApplicationBySiteUserIdAndTermId (siteUser .getId (), term .getId ());
6677
6778 List <Long > univApplyInfoIds = Stream .of (
6879 userLatestApplication .getFirstChoiceUnivApplyInfoId (),
@@ -76,7 +87,7 @@ public ApplicationsResponse getApplicantsByUserApplications(long siteUserId) {
7687 return new ApplicationsResponse (List .of (), List .of (), List .of ());
7788 }
7889
79- List <Application > applications = applicationRepository .findAllByUnivApplyInfoIds (univApplyInfoIds , VerifyStatus .APPROVED , term );
90+ List <Application > applications = applicationRepository .findAllByUnivApplyInfoIds (univApplyInfoIds , VerifyStatus .APPROVED , term . getId () );
8091 List <UnivApplyInfo > univApplyInfos = univApplyInfoRepository .findAllByIds (univApplyInfoIds );
8192
8293 return classifyApplicationsByChoice (univApplyInfos , applications , siteUser );
@@ -128,7 +139,11 @@ private List<ApplicantsResponse> createUniversityApplicantsResponses(
128139 public void validateSiteUserCanViewApplicants (long siteUserId ) {
129140 SiteUser siteUser = siteUserRepository .findById (siteUserId )
130141 .orElseThrow (() -> new CustomException (USER_NOT_FOUND ));
131- VerifyStatus verifyStatus = applicationRepository .getApplicationBySiteUserIdAndTerm (siteUser .getId (), term ).getVerifyStatus ();
142+
143+ Term term = termRepository .findByIsCurrentTrue ()
144+ .orElseThrow (() -> new CustomException (CURRENT_TERM_NOT_FOUND ));
145+
146+ VerifyStatus verifyStatus = applicationRepository .getApplicationBySiteUserIdAndTermId (siteUser .getId (), term .getId ()).getVerifyStatus ();
132147 if (verifyStatus != VerifyStatus .APPROVED ) {
133148 throw new CustomException (APPLICATION_NOT_APPROVED );
134149 }
0 commit comments