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 0c6e3cc0a..32c7a971c 100644 --- a/src/main/java/com/example/solidconnection/application/domain/Application.java +++ b/src/main/java/com/example/solidconnection/application/domain/Application.java @@ -7,12 +7,10 @@ import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; -import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Index; -import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; import lombok.Getter; import lombok.NoArgsConstructor; @@ -75,15 +73,15 @@ public class Application { @Column(name = "third_choice_university_info_for_apply_id") private Long thirdChoiceUnivApplyInfoId; - @ManyToOne(fetch = FetchType.LAZY) - private SiteUser siteUser; + @Column(name = "site_user_id") + private long siteUserId; public Application( SiteUser siteUser, Gpa gpa, LanguageTest languageTest, String term) { - this.siteUser = siteUser; + this.siteUserId = siteUser.getId(); this.gpa = gpa; this.languageTest = languageTest; this.term = term; @@ -101,7 +99,7 @@ public Application( Long secondChoiceUnivApplyInfoId, Long thirdChoiceUnivApplyInfoId, String nicknameForApply) { - this.siteUser = siteUser; + this.siteUserId = siteUser.getId(); this.gpa = gpa; this.languageTest = languageTest; this.term = term; @@ -122,7 +120,7 @@ public Application( Long secondChoiceUnivApplyInfoId, Long thirdChoiceUnivApplyInfoId, String nicknameForApply) { - this.siteUser = siteUser; + this.siteUserId = siteUser.getId(); this.gpa = gpa; this.languageTest = languageTest; this.term = term; diff --git a/src/main/java/com/example/solidconnection/application/dto/ApplicantsResponse.java b/src/main/java/com/example/solidconnection/application/dto/ApplicantsResponse.java index 72fbc9c22..b92f699a7 100644 --- a/src/main/java/com/example/solidconnection/application/dto/ApplicantsResponse.java +++ b/src/main/java/com/example/solidconnection/application/dto/ApplicantsResponse.java @@ -5,6 +5,7 @@ import com.example.solidconnection.university.domain.UnivApplyInfo; import java.util.List; +import java.util.Objects; public record ApplicantsResponse( String koreanName, @@ -24,6 +25,6 @@ public static ApplicantsResponse of(UnivApplyInfo univApplyInfo, List @Query(""" SELECT a FROM Application a - JOIN FETCH a.siteUser WHERE (a.firstChoiceUnivApplyInfoId IN :univApplyInfoIds OR a.secondChoiceUnivApplyInfoId IN :univApplyInfoIds OR a.thirdChoiceUnivApplyInfoId IN :univApplyInfoIds) @@ -33,14 +31,14 @@ public interface ApplicationRepository extends JpaRepository @Query(""" SELECT a FROM Application a - WHERE a.siteUser = :siteUser + WHERE a.siteUserId = :siteUserId AND a.term = :term AND a.isDelete = false """) - Optional findBySiteUserAndTerm(@Param("siteUser") SiteUser siteUser, @Param("term") String term); + Optional findBySiteUserIdAndTerm(@Param("siteUserId") long siteUserId, @Param("term") String term); - default Application getApplicationBySiteUserAndTerm(SiteUser siteUser, String term) { - return findBySiteUserAndTerm(siteUser, term) + default Application getApplicationBySiteUserIdAndTerm(long siteUserId, String term) { + return findBySiteUserIdAndTerm(siteUserId, term) .orElseThrow(() -> new CustomException(APPLICATION_NOT_FOUND)); } } diff --git a/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java b/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java index 8ad3a9287..f3dbc827c 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationQueryService.java @@ -56,7 +56,7 @@ public ApplicationsResponse getApplicants(SiteUser siteUser, String regionCode, @Transactional(readOnly = true) public ApplicationsResponse getApplicantsByUserApplications(SiteUser siteUser) { - Application userLatestApplication = applicationRepository.getApplicationBySiteUserAndTerm(siteUser, term); + Application userLatestApplication = applicationRepository.getApplicationBySiteUserIdAndTerm(siteUser.getId(), term); List univApplyInfoIds = Stream.of( userLatestApplication.getFirstChoiceUnivApplyInfoId(), @@ -120,7 +120,7 @@ private List createUniversityApplicantsResponses( @Transactional(readOnly = true) public void validateSiteUserCanViewApplicants(SiteUser siteUser) { - VerifyStatus verifyStatus = applicationRepository.getApplicationBySiteUserAndTerm(siteUser, term).getVerifyStatus(); + VerifyStatus verifyStatus = applicationRepository.getApplicationBySiteUserIdAndTerm(siteUser.getId(), term).getVerifyStatus(); if (verifyStatus != VerifyStatus.APPROVED) { throw new CustomException(APPLICATION_NOT_APPROVED); } 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 37cc0ae19..e811a48a0 100644 --- a/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java +++ b/src/main/java/com/example/solidconnection/application/service/ApplicationSubmissionService.java @@ -50,7 +50,7 @@ public ApplicationSubmissionResponse apply(SiteUser siteUser, ApplyRequest apply Long secondChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.secondChoiceUnivApplyInfoId(); Long thirdChoiceUnivApplyInfoId = univApplyInfoChoiceRequest.thirdChoiceUnivApplyInfoId(); - Optional existingApplication = applicationRepository.findBySiteUserAndTerm(siteUser, term); + Optional existingApplication = applicationRepository.findBySiteUserIdAndTerm(siteUser.getId(), term); int updateCount = existingApplication .map(application -> { validateUpdateLimitNotExceed(application); @@ -78,7 +78,7 @@ public ApplicationSubmissionResponse apply(SiteUser siteUser, ApplyRequest apply } private GpaScore getValidGpaScore(SiteUser siteUser, Long gpaScoreId) { - GpaScore gpaScore = gpaScoreRepository.findGpaScoreBySiteUserAndId(siteUser, gpaScoreId) + GpaScore gpaScore = gpaScoreRepository.findGpaScoreBySiteUserIdAndId(siteUser.getId(), gpaScoreId) .orElseThrow(() -> new CustomException(GPA_SCORE_NOT_FOUND)); if (gpaScore.getVerifyStatus() != VerifyStatus.APPROVED) { throw new CustomException(INVALID_GPA_SCORE_STATUS); @@ -88,7 +88,7 @@ private GpaScore getValidGpaScore(SiteUser siteUser, Long gpaScoreId) { private LanguageTestScore getValidLanguageTestScore(SiteUser siteUser, Long languageTestScoreId) { LanguageTestScore languageTestScore = languageTestScoreRepository - .findLanguageTestScoreBySiteUserAndId(siteUser, languageTestScoreId) + .findLanguageTestScoreBySiteUserIdAndId(siteUser.getId(), languageTestScoreId) .orElseThrow(() -> new CustomException(INVALID_LANGUAGE_TEST_SCORE)); if (languageTestScore.getVerifyStatus() != VerifyStatus.APPROVED) { throw new CustomException(INVALID_LANGUAGE_TEST_SCORE_STATUS); diff --git a/src/main/java/com/example/solidconnection/location/country/domain/Country.java b/src/main/java/com/example/solidconnection/location/country/domain/Country.java index 5a14fef86..90ce8fe4f 100644 --- a/src/main/java/com/example/solidconnection/location/country/domain/Country.java +++ b/src/main/java/com/example/solidconnection/location/country/domain/Country.java @@ -1,10 +1,8 @@ package com.example.solidconnection.location.country.domain; -import com.example.solidconnection.location.region.domain.Region; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; import lombok.AccessLevel; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -23,12 +21,12 @@ public class Country { @Column(nullable = false, length = 100) private String koreanName; - @ManyToOne - private Region region; + @Column(name="region_code") + private String regionCode; - public Country(String code, String koreanName, Region region) { + public Country(String code, String koreanName, String regionCode) { this.code = code; this.koreanName = koreanName; - this.region = region; + this.regionCode = regionCode; } } diff --git a/src/main/java/com/example/solidconnection/location/country/domain/InterestedCountry.java b/src/main/java/com/example/solidconnection/location/country/domain/InterestedCountry.java index edc68ba79..bfad77e10 100644 --- a/src/main/java/com/example/solidconnection/location/country/domain/InterestedCountry.java +++ b/src/main/java/com/example/solidconnection/location/country/domain/InterestedCountry.java @@ -1,11 +1,11 @@ package com.example.solidconnection.location.country.domain; import com.example.solidconnection.siteuser.domain.SiteUser; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; import jakarta.persistence.UniqueConstraint; import lombok.AccessLevel; @@ -27,14 +27,14 @@ public class InterestedCountry { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @ManyToOne - private SiteUser siteUser; + @Column(name="site_user_id") + private long siteUserId; - @ManyToOne - private Country country; + @Column(name="country_code") + private String countryCode; public InterestedCountry(SiteUser siteUser, Country country) { - this.siteUser = siteUser; - this.country = country; + this.siteUserId = siteUser.getId(); + this.countryCode = country.getCode(); } } diff --git a/src/main/java/com/example/solidconnection/location/country/repository/InterestedCountryRepository.java b/src/main/java/com/example/solidconnection/location/country/repository/InterestedCountryRepository.java index a24866ed6..9e80a84d2 100644 --- a/src/main/java/com/example/solidconnection/location/country/repository/InterestedCountryRepository.java +++ b/src/main/java/com/example/solidconnection/location/country/repository/InterestedCountryRepository.java @@ -1,12 +1,11 @@ package com.example.solidconnection.location.country.repository; import com.example.solidconnection.location.country.domain.InterestedCountry; -import com.example.solidconnection.siteuser.domain.SiteUser; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface InterestedCountryRepository extends JpaRepository { - List findAllBySiteUser(SiteUser siteUser); + List findAllBySiteUserId(long siteUserId); } diff --git a/src/main/java/com/example/solidconnection/location/region/domain/InterestedRegion.java b/src/main/java/com/example/solidconnection/location/region/domain/InterestedRegion.java index 35214a95c..29f6bcaa8 100644 --- a/src/main/java/com/example/solidconnection/location/region/domain/InterestedRegion.java +++ b/src/main/java/com/example/solidconnection/location/region/domain/InterestedRegion.java @@ -1,11 +1,11 @@ package com.example.solidconnection.location.region.domain; import com.example.solidconnection.siteuser.domain.SiteUser; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; import jakarta.persistence.UniqueConstraint; import lombok.AccessLevel; @@ -27,14 +27,14 @@ public class InterestedRegion { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @ManyToOne - private SiteUser siteUser; + @Column(name="site_user_id") + private long siteUserId; - @ManyToOne - private Region region; + @Column(name="region_code") + private String regionCode; public InterestedRegion(SiteUser siteUser, Region region) { - this.siteUser = siteUser; - this.region = region; + this.siteUserId = siteUser.getId(); + this.regionCode = region.getCode(); } } diff --git a/src/main/java/com/example/solidconnection/location/region/repository/InterestedRegionRepository.java b/src/main/java/com/example/solidconnection/location/region/repository/InterestedRegionRepository.java index 1e78b1803..8e06e8411 100644 --- a/src/main/java/com/example/solidconnection/location/region/repository/InterestedRegionRepository.java +++ b/src/main/java/com/example/solidconnection/location/region/repository/InterestedRegionRepository.java @@ -8,5 +8,5 @@ public interface InterestedRegionRepository extends JpaRepository { - List findAllBySiteUser(SiteUser siteUser); + List findAllBySiteUserId(long siteUserId); } diff --git a/src/main/java/com/example/solidconnection/score/domain/GpaScore.java b/src/main/java/com/example/solidconnection/score/domain/GpaScore.java index 45193e692..8c2b42e02 100644 --- a/src/main/java/com/example/solidconnection/score/domain/GpaScore.java +++ b/src/main/java/com/example/solidconnection/score/domain/GpaScore.java @@ -12,7 +12,6 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; @@ -38,24 +37,15 @@ public class GpaScore extends BaseEntity { private String rejectedReason; - @ManyToOne - private SiteUser siteUser; + private long siteUserId; public GpaScore(Gpa gpa, SiteUser siteUser) { this.gpa = gpa; - this.siteUser = siteUser; + this.siteUserId = siteUser.getId(); this.verifyStatus = VerifyStatus.PENDING; this.rejectedReason = null; } - public void setSiteUser(SiteUser siteUser) { - if (this.siteUser != null) { - this.siteUser.getGpaScoreList().remove(this); - } - this.siteUser = siteUser; - siteUser.getGpaScoreList().add(this); - } - public void updateGpaScore(Gpa gpa, VerifyStatus verifyStatus, String rejectedReason) { this.gpa = gpa; this.verifyStatus = verifyStatus; diff --git a/src/main/java/com/example/solidconnection/score/domain/LanguageTestScore.java b/src/main/java/com/example/solidconnection/score/domain/LanguageTestScore.java index 3ef773806..2bb87e707 100644 --- a/src/main/java/com/example/solidconnection/score/domain/LanguageTestScore.java +++ b/src/main/java/com/example/solidconnection/score/domain/LanguageTestScore.java @@ -12,7 +12,6 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -38,21 +37,12 @@ public class LanguageTestScore extends BaseEntity { private String rejectedReason; - @ManyToOne - private SiteUser siteUser; + private long siteUserId; public LanguageTestScore(LanguageTest languageTest, SiteUser siteUser) { this.languageTest = languageTest; this.verifyStatus = VerifyStatus.PENDING; - this.siteUser = siteUser; - } - - public void setSiteUser(SiteUser siteUser) { - if (this.siteUser != null) { - this.siteUser.getLanguageTestScoreList().remove(this); - } - this.siteUser = siteUser; - siteUser.getLanguageTestScoreList().add(this); + this.siteUserId = siteUser.getId(); } public void updateLanguageTestScore(LanguageTest languageTest, VerifyStatus verifyStatus, String rejectedReason) { diff --git a/src/main/java/com/example/solidconnection/score/repository/GpaScoreRepository.java b/src/main/java/com/example/solidconnection/score/repository/GpaScoreRepository.java index 0114410a3..a37fbfd1c 100644 --- a/src/main/java/com/example/solidconnection/score/repository/GpaScoreRepository.java +++ b/src/main/java/com/example/solidconnection/score/repository/GpaScoreRepository.java @@ -2,14 +2,16 @@ import com.example.solidconnection.score.domain.GpaScore; import com.example.solidconnection.score.repository.custom.GpaScoreFilterRepository; -import com.example.solidconnection.siteuser.domain.SiteUser; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; import java.util.Optional; public interface GpaScoreRepository extends JpaRepository, GpaScoreFilterRepository { - Optional findGpaScoreBySiteUser(SiteUser siteUser); + Optional findGpaScoreBySiteUserId(long siteUserId); - Optional findGpaScoreBySiteUserAndId(SiteUser siteUser, Long id); + Optional findGpaScoreBySiteUserIdAndId(long siteUserId, Long id); + + List findBySiteUserId(long siteUserId); } diff --git a/src/main/java/com/example/solidconnection/score/repository/LanguageTestScoreRepository.java b/src/main/java/com/example/solidconnection/score/repository/LanguageTestScoreRepository.java index 8eb00a014..2f4268c06 100644 --- a/src/main/java/com/example/solidconnection/score/repository/LanguageTestScoreRepository.java +++ b/src/main/java/com/example/solidconnection/score/repository/LanguageTestScoreRepository.java @@ -2,15 +2,17 @@ import com.example.solidconnection.score.domain.LanguageTestScore; import com.example.solidconnection.score.repository.custom.LanguageTestScoreFilterRepository; -import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.university.domain.LanguageTestType; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; import java.util.Optional; public interface LanguageTestScoreRepository extends JpaRepository, LanguageTestScoreFilterRepository { - Optional findLanguageTestScoreBySiteUserAndLanguageTest_LanguageTestType(SiteUser siteUser, LanguageTestType languageTestType); + Optional findLanguageTestScoreBySiteUserIdAndLanguageTest_LanguageTestType(long siteUserId, LanguageTestType languageTestType); - Optional findLanguageTestScoreBySiteUserAndId(SiteUser siteUser, Long id); + Optional findLanguageTestScoreBySiteUserIdAndId(long siteUserId, Long id); + + List findBySiteUserId(long siteUserId); } diff --git a/src/main/java/com/example/solidconnection/score/repository/custom/GpaScoreFilterRepositoryImpl.java b/src/main/java/com/example/solidconnection/score/repository/custom/GpaScoreFilterRepositoryImpl.java index efa12f8df..dad2fa25e 100644 --- a/src/main/java/com/example/solidconnection/score/repository/custom/GpaScoreFilterRepositoryImpl.java +++ b/src/main/java/com/example/solidconnection/score/repository/custom/GpaScoreFilterRepositoryImpl.java @@ -70,7 +70,7 @@ public Page searchGpaScores(ScoreSearchCondition conditi List content = queryFactory .select(GPA_SCORE_SEARCH_RESPONSE_PROJECTION) .from(gpaScore) - .join(gpaScore.siteUser, siteUser) + .join(siteUser).on(gpaScore.siteUserId.eq(siteUser.id)) .where( verifyStatusEq(condition.verifyStatus()), nicknameContains(condition.nickname()), @@ -84,7 +84,7 @@ public Page searchGpaScores(ScoreSearchCondition conditi Long totalCount = queryFactory .select(gpaScore.count()) .from(gpaScore) - .join(gpaScore.siteUser, siteUser) + .join(siteUser).on(gpaScore.siteUserId.eq(siteUser.id)) .where( verifyStatusEq(condition.verifyStatus()), nicknameContains(condition.nickname()), diff --git a/src/main/java/com/example/solidconnection/score/repository/custom/LanguageTestScoreFilterRepositoryImpl.java b/src/main/java/com/example/solidconnection/score/repository/custom/LanguageTestScoreFilterRepositoryImpl.java index 9f677db09..8d958d12a 100644 --- a/src/main/java/com/example/solidconnection/score/repository/custom/LanguageTestScoreFilterRepositoryImpl.java +++ b/src/main/java/com/example/solidconnection/score/repository/custom/LanguageTestScoreFilterRepositoryImpl.java @@ -70,7 +70,7 @@ public Page searchLanguageTestScores(ScoreSearc List content = queryFactory .select(LANGUAGE_TEST_SCORE_SEARCH_RESPONSE_PROJECTION) .from(languageTestScore) - .join(languageTestScore.siteUser, siteUser) + .join(siteUser).on(languageTestScore.siteUserId.eq(siteUser.id)) .where( verifyStatusEq(condition.verifyStatus()), nicknameContains(condition.nickname()), @@ -84,7 +84,7 @@ public Page searchLanguageTestScores(ScoreSearc Long totalCount = queryFactory .select(languageTestScore.count()) .from(languageTestScore) - .join(languageTestScore.siteUser, siteUser) + .join(siteUser).on(languageTestScore.siteUserId.eq(siteUser.id)) .where( verifyStatusEq(condition.verifyStatus()), nicknameContains(condition.nickname()), diff --git a/src/main/java/com/example/solidconnection/score/service/ScoreService.java b/src/main/java/com/example/solidconnection/score/service/ScoreService.java index 5a6cf9801..8b56461e9 100644 --- a/src/main/java/com/example/solidconnection/score/service/ScoreService.java +++ b/src/main/java/com/example/solidconnection/score/service/ScoreService.java @@ -2,7 +2,6 @@ import com.example.solidconnection.application.domain.Gpa; import com.example.solidconnection.application.domain.LanguageTest; -import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.s3.domain.ImgType; import com.example.solidconnection.s3.dto.UploadedFileUrlResponse; import com.example.solidconnection.s3.service.S3Service; @@ -17,19 +16,14 @@ import com.example.solidconnection.score.repository.GpaScoreRepository; import com.example.solidconnection.score.repository.LanguageTestScoreRepository; import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; -import java.util.Collections; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; -import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND; - @Service @RequiredArgsConstructor public class ScoreService { @@ -37,23 +31,14 @@ public class ScoreService { private final GpaScoreRepository gpaScoreRepository; private final S3Service s3Service; private final LanguageTestScoreRepository languageTestScoreRepository; - private final SiteUserRepository siteUserRepository; @Transactional public Long submitGpaScore(SiteUser siteUser, GpaScoreRequest gpaScoreRequest, MultipartFile file) { UploadedFileUrlResponse uploadedFile = s3Service.uploadFile(file, ImgType.GPA); Gpa gpa = new Gpa(gpaScoreRequest.gpa(), gpaScoreRequest.gpaCriteria(), uploadedFile.fileUrl()); - - /* - * todo: siteUser를 영속 상태로 만들 수 있도록 컨트롤러에서 siteUserId 를 넘겨줄 것인지, - * siteUser 에 gpaScoreList 를 FetchType.EAGER 로 설정할 것인지, - * gpa 와 siteUser 사이의 양방향을 끊을 것인지 생각해봐야한다. - */ - SiteUser siteUser1 = siteUserRepository.findById(siteUser.getId()).orElseThrow(() -> new CustomException(USER_NOT_FOUND)); - GpaScore newGpaScore = new GpaScore(gpa, siteUser1); - newGpaScore.setSiteUser(siteUser1); - GpaScore savedNewGpaScore = gpaScoreRepository.save(newGpaScore); // 저장 후 반환된 객체 - return savedNewGpaScore.getId(); // 저장된 GPA Score의 ID 반환 + GpaScore newGpaScore = new GpaScore(gpa, siteUser); + GpaScore savedNewGpaScore = gpaScoreRepository.save(newGpaScore); + return savedNewGpaScore.getId(); } @Transactional @@ -61,42 +46,31 @@ public Long submitLanguageTestScore(SiteUser siteUser, LanguageTestScoreRequest UploadedFileUrlResponse uploadedFile = s3Service.uploadFile(file, ImgType.LANGUAGE_TEST); LanguageTest languageTest = new LanguageTest(languageTestScoreRequest.languageTestType(), languageTestScoreRequest.languageTestScore(), uploadedFile.fileUrl()); - - /* - * todo: siteUser를 영속 상태로 만들 수 있도록 컨트롤러에서 siteUserId 를 넘겨줄 것인지, - * siteUser 에 languageTestScoreList 를 FetchType.EAGER 로 설정할 것인지, - * languageTest 와 siteUser 사이의 양방향을 끊을 것인지 생각해봐야한다. - */ - SiteUser siteUser1 = siteUserRepository.findById(siteUser.getId()).orElseThrow(() -> new CustomException(USER_NOT_FOUND)); - LanguageTestScore newScore = new LanguageTestScore(languageTest, siteUser1); - newScore.setSiteUser(siteUser1); - LanguageTestScore savedNewScore = languageTestScoreRepository.save(newScore); // 새로 저장한 객체 - return savedNewScore.getId(); // 저장된 객체의 ID 반환 + LanguageTestScore newScore = new LanguageTestScore(languageTest, siteUser); + LanguageTestScore savedNewScore = languageTestScoreRepository.save(newScore); + return savedNewScore.getId(); } @Transactional(readOnly = true) public GpaScoreStatusesResponse getGpaScoreStatus(SiteUser siteUser) { - // todo: ditto - SiteUser siteUser1 = siteUserRepository.findById(siteUser.getId()).orElseThrow(() -> new CustomException(USER_NOT_FOUND)); List gpaScoreStatusResponseList = - Optional.ofNullable(siteUser1.getGpaScoreList()) - .map(scores -> scores.stream() - .map(GpaScoreStatusResponse::from) - .collect(Collectors.toList())) - .orElse(Collections.emptyList()); + gpaScoreRepository.findBySiteUserId(siteUser.getId()) + .stream() + .map(GpaScoreStatusResponse::from) + .toList(); + return GpaScoreStatusesResponse.from(gpaScoreStatusResponseList); } @Transactional(readOnly = true) public LanguageTestScoreStatusesResponse getLanguageTestScoreStatus(SiteUser siteUser) { - // todo: ditto - SiteUser siteUser1 = siteUserRepository.findById(siteUser.getId()).orElseThrow(() -> new CustomException(USER_NOT_FOUND)); + List languageTestScores = languageTestScoreRepository.findBySiteUserId(siteUser.getId()); + List languageTestScoreStatusResponseList = - Optional.ofNullable(siteUser1.getLanguageTestScoreList()) - .map(scores -> scores.stream() - .map(LanguageTestScoreStatusResponse::from) - .collect(Collectors.toList())) - .orElse(Collections.emptyList()); + languageTestScores.stream() + .map(LanguageTestScoreStatusResponse::from) + .collect(Collectors.toList()); + return LanguageTestScoreStatusesResponse.from(languageTestScoreStatusResponseList); } } diff --git a/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java b/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java index 7c065c8e1..596801a97 100644 --- a/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java +++ b/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java @@ -3,8 +3,6 @@ import com.example.solidconnection.community.comment.domain.Comment; import com.example.solidconnection.community.post.domain.Post; import com.example.solidconnection.community.post.domain.PostLike; -import com.example.solidconnection.score.domain.GpaScore; -import com.example.solidconnection.score.domain.LanguageTestScore; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -88,12 +86,6 @@ public class SiteUser { @OneToMany(mappedBy = "siteUser", cascade = CascadeType.ALL, orphanRemoval = true) private List postLikeList = new ArrayList<>(); - @OneToMany(mappedBy = "siteUser", cascade = CascadeType.ALL, orphanRemoval = true) - private List languageTestScoreList = new ArrayList<>(); - - @OneToMany(mappedBy = "siteUser", cascade = CascadeType.ALL, orphanRemoval = true) - private List gpaScoreList = new ArrayList<>(); - public SiteUser( String email, String nickname, diff --git a/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java b/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java index c524487e8..03db85fbc 100644 --- a/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java +++ b/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java @@ -8,7 +8,7 @@ import com.example.solidconnection.siteuser.dto.MyPageResponse; import com.example.solidconnection.university.repository.LikedUnivApplyInfoRepository; import com.example.solidconnection.siteuser.repository.SiteUserRepository; -import com.example.solidconnection.university.domain.LikedUnivApplyInfo; +import com.example.solidconnection.university.domain.UnivApplyInfo; import com.example.solidconnection.university.dto.UnivApplyInfoPreviewResponse; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -39,7 +39,7 @@ public class MyPageService { * */ @Transactional(readOnly = true) public MyPageResponse getMyPageInfo(SiteUser siteUser) { - int likedUnivApplyInfoCount = likedUnivApplyInfoRepository.countBySiteUser_Id(siteUser.getId()); + int likedUnivApplyInfoCount = likedUnivApplyInfoRepository.countBySiteUserId(siteUser.getId()); return MyPageResponse.of(siteUser, likedUnivApplyInfoCount); } @@ -95,9 +95,10 @@ private boolean isDefaultProfileImage(String profileImageUrl) { * */ @Transactional(readOnly = true) public List getWishUnivApplyInfo(SiteUser siteUser) { - List likedUnivApplyInfos = likedUnivApplyInfoRepository.findAllBySiteUser_Id(siteUser.getId()); - return likedUnivApplyInfos.stream() - .map(likedUnivApplyInfo -> UnivApplyInfoPreviewResponse.from(likedUnivApplyInfo.getUnivApplyInfo())) + List univApplyInfos = likedUnivApplyInfoRepository.findUnivApplyInfosBySiteUserId(siteUser.getId()); + + return univApplyInfos.stream() + .map(UnivApplyInfoPreviewResponse::from) .toList(); } } diff --git a/src/main/java/com/example/solidconnection/university/domain/LikedUnivApplyInfo.java b/src/main/java/com/example/solidconnection/university/domain/LikedUnivApplyInfo.java index 08612fa42..0fc24ae3c 100644 --- a/src/main/java/com/example/solidconnection/university/domain/LikedUnivApplyInfo.java +++ b/src/main/java/com/example/solidconnection/university/domain/LikedUnivApplyInfo.java @@ -1,12 +1,10 @@ package com.example.solidconnection.university.domain; -import com.example.solidconnection.siteuser.domain.SiteUser; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; import jakarta.persistence.UniqueConstraint; import lombok.AllArgsConstructor; @@ -33,10 +31,9 @@ public class LikedUnivApplyInfo { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @ManyToOne - @JoinColumn(name = "university_info_for_apply_id") - private UnivApplyInfo univApplyInfo; + @Column(name="university_info_for_apply_id") + private long univApplyInfoId; - @ManyToOne - private SiteUser siteUser; + @Column(name="site_user_id") + private long siteUserId; } diff --git a/src/main/java/com/example/solidconnection/university/domain/UnivApplyInfo.java b/src/main/java/com/example/solidconnection/university/domain/UnivApplyInfo.java index f54ffe5e7..9287f5bd4 100644 --- a/src/main/java/com/example/solidconnection/university/domain/UnivApplyInfo.java +++ b/src/main/java/com/example/solidconnection/university/domain/UnivApplyInfo.java @@ -11,6 +11,7 @@ import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; +import jakarta.persistence.CascadeType; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; @@ -76,10 +77,10 @@ public class UnivApplyInfo { @Column(length = 1000) private String details; - @OneToMany(mappedBy = "univApplyInfo", fetch = FetchType.EAGER) + @OneToMany(mappedBy = "univApplyInfo", cascade = CascadeType.ALL, orphanRemoval = true) private Set languageRequirements = new HashSet<>(); - @ManyToOne(fetch = FetchType.EAGER) + @ManyToOne(fetch = FetchType.LAZY) private University university; public void addLanguageRequirements(LanguageRequirement languageRequirements) { diff --git a/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java b/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java index bca7a7eef..fe4f93676 100644 --- a/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java +++ b/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java @@ -1,18 +1,29 @@ package com.example.solidconnection.university.repository; -import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.university.domain.LikedUnivApplyInfo; import com.example.solidconnection.university.domain.UnivApplyInfo; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import java.util.List; import java.util.Optional; public interface LikedUnivApplyInfoRepository extends JpaRepository { - List findAllBySiteUser_Id(long siteUserId); + List findAllBySiteUserId(long siteUserId); - int countBySiteUser_Id(long siteUserId); + int countBySiteUserId(long siteUserId); - Optional findBySiteUserAndUnivApplyInfo(SiteUser siteUser, UnivApplyInfo univApplyInfo); + Optional findBySiteUserIdAndUnivApplyInfoId(long siteUserId, long univApplyInfoId); + + @Query(""" + SELECT u + FROM UnivApplyInfo u + JOIN LikedUnivApplyInfo l ON u.id = l.univApplyInfoId + WHERE l.siteUserId = :siteUserId + """) + List findUnivApplyInfosBySiteUserId(@Param("siteUserId") long siteUserId); + + boolean existsBySiteUserIdAndUnivApplyInfoId(long siteUserId, long univApplyInfoId); } diff --git a/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java b/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java index 389f66531..c99ac01eb 100644 --- a/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java +++ b/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java @@ -1,9 +1,9 @@ package com.example.solidconnection.university.repository; import com.example.solidconnection.common.exception.CustomException; -import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.university.domain.UnivApplyInfo; import com.example.solidconnection.university.repository.custom.UnivApplyInfoFilterRepository; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -17,33 +17,37 @@ public interface UnivApplyInfoRepository extends JpaRepository, UnivApplyInfoFilterRepository { @Query(""" - SELECT uai - FROM UnivApplyInfo uai - JOIN University u ON uai.university = u - WHERE (u.country.code IN ( - SELECT c.code - FROM InterestedCountry ic - JOIN ic.country c - WHERE ic.siteUser = :siteUser - ) - OR u.region.code IN ( - SELECT r.code - FROM InterestedRegion ir - JOIN ir.region r - WHERE ir.siteUser = :siteUser - )) - AND uai.term = :term - """) - List findAllBySiteUsersInterestedCountryOrRegionAndTerm(@Param("siteUser") SiteUser siteUser, @Param("term") String term); + SELECT DISTINCT uai + FROM UnivApplyInfo uai + LEFT JOIN FETCH uai.languageRequirements lr + JOIN FETCH uai.university u + LEFT JOIN FETCH u.country c + LEFT JOIN FETCH u.region r + WHERE (c.code IN ( + SELECT ic.countryCode + FROM InterestedCountry ic + WHERE ic.siteUserId = :siteUserId + ) + OR r.code IN ( + SELECT ir.regionCode + FROM InterestedRegion ir + WHERE ir.siteUserId = :siteUserId + )) + AND uai.term = :term + """) + List findAllBySiteUsersInterestedCountryOrRegionAndTerm(@Param("siteUserId") Long siteUserId, @Param("term") String term); - @Query(value = """ - SELECT * - FROM university_info_for_apply - WHERE term = :term - ORDER BY RAND() - LIMIT :limitNum - """, nativeQuery = true) - List findRandomByTerm(@Param("term") String term, @Param("limitNum") int limitNum); + @Query(""" + SELECT uai + FROM UnivApplyInfo uai + LEFT JOIN FETCH uai.languageRequirements lr + LEFT JOIN FETCH uai.university u + LEFT JOIN FETCH u.country c + LEFT JOIN FETCH u.region r + WHERE uai.term = :term + ORDER BY FUNCTION('RAND') + """) + List findRandomByTerm(@Param("term") String term, Pageable pageable); // JPA에서 LIMIT 사용이 불가하므로 Pageable을 통해 0page에서 정해진 개수 만큼 가져오는 방식으로 구현 default UnivApplyInfo getUnivApplyInfoById(Long id) { return findById(id) @@ -53,9 +57,10 @@ default UnivApplyInfo getUnivApplyInfoById(Long id) { @Query(""" SELECT DISTINCT uai FROM UnivApplyInfo uai - JOIN FETCH uai.university u - JOIN FETCH u.country c - JOIN FETCH u.region r + LEFT JOIN FETCH uai.languageRequirements lr + LEFT JOIN FETCH uai.university u + LEFT JOIN FETCH u.country c + LEFT JOIN FETCH u.region r WHERE uai.id IN :ids """) List findAllByIds(@Param("ids") List ids); diff --git a/src/main/java/com/example/solidconnection/university/repository/UniversityInfoForApplyRepository.java b/src/main/java/com/example/solidconnection/university/repository/UniversityInfoForApplyRepository.java deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/java/com/example/solidconnection/university/repository/custom/UnivApplyInfoFilterRepositoryImpl.java b/src/main/java/com/example/solidconnection/university/repository/custom/UnivApplyInfoFilterRepositoryImpl.java index 50c9bcf67..cf8f185d4 100644 --- a/src/main/java/com/example/solidconnection/university/repository/custom/UnivApplyInfoFilterRepositoryImpl.java +++ b/src/main/java/com/example/solidconnection/university/repository/custom/UnivApplyInfoFilterRepositoryImpl.java @@ -32,29 +32,26 @@ public List findAllByRegionCodeAndKeywords(String regionCode, Lis QUnivApplyInfo univApplyInfo = QUnivApplyInfo.univApplyInfo; QUniversity university = QUniversity.university; QCountry country = QCountry.country; - QRegion region = QRegion.region; QLanguageRequirement languageRequirement = QLanguageRequirement.languageRequirement; return queryFactory .selectFrom(univApplyInfo) .join(univApplyInfo.university, university).fetchJoin() .join(university.country, country).fetchJoin() - .join(country.region, region).fetchJoin() .leftJoin(univApplyInfo.languageRequirements, languageRequirement).fetchJoin() .where( - regionCodeEq(region, regionCode) + regionCodeEq(country, regionCode) .and(countryOrUniversityContainsKeyword(country, university, keywords)) ) .distinct() .fetch(); } - - private BooleanExpression regionCodeEq(QRegion region, String regionCode) { + private BooleanExpression regionCodeEq(QCountry country, String regionCode) { if (regionCode == null || regionCode.isEmpty()) { return Expressions.asBoolean(true).isTrue(); } - return region.code.eq(regionCode); + return country.regionCode.eq(regionCode); } private BooleanExpression countryOrUniversityContainsKeyword(QCountry country, QUniversity university, List keywords) { @@ -86,7 +83,7 @@ public List findAllByRegionCodeAndKeywordsAndLanguageTestTypeAndT .join(univApplyInfo.university, university) .join(university.country, country) .join(university.region, region) - .where(regionCodeEq(region, regionCode) + .where(regionCodeEq(country, regionCode) .and(countryOrUniversityContainsKeyword(country, university, keywords)) .and(univApplyInfo.term.eq(term))) .fetch(); diff --git a/src/main/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendService.java b/src/main/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendService.java index 1835f4ed0..07c2ef653 100644 --- a/src/main/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendService.java +++ b/src/main/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendService.java @@ -7,6 +7,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.event.EventListener; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import java.util.List; @@ -30,6 +32,7 @@ public class GeneralUnivApplyInfoRecommendService { @EventListener(ApplicationReadyEvent.class) public void init() { - generalRecommends = univApplyInfoRepository.findRandomByTerm(term, RECOMMEND_UNIV_APPLY_INFO_NUM); + Pageable page = PageRequest.of(0, RECOMMEND_UNIV_APPLY_INFO_NUM); + generalRecommends = univApplyInfoRepository.findRandomByTerm(term, page); } } diff --git a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoLikeService.java b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoLikeService.java index 0d3fc4d96..4aa70eac4 100644 --- a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoLikeService.java +++ b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoLikeService.java @@ -38,14 +38,14 @@ public class UnivApplyInfoLikeService { public LikeResultResponse likeUnivApplyInfo(SiteUser siteUser, Long univApplyInfoId) { UnivApplyInfo univApplyInfo = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); - Optional optionalLikedUnivApplyInfo = likedUnivApplyInfoRepository.findBySiteUserAndUnivApplyInfo(siteUser, univApplyInfo); + Optional optionalLikedUnivApplyInfo = likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(siteUser.getId(), univApplyInfo.getId()); if (optionalLikedUnivApplyInfo.isPresent()) { throw new CustomException(ALREADY_LIKED_UNIV_APPLY_INFO); } LikedUnivApplyInfo likedUnivApplyInfo = LikedUnivApplyInfo.builder() - .univApplyInfo(univApplyInfo) - .siteUser(siteUser) + .univApplyInfoId(univApplyInfo.getId()) + .siteUserId(siteUser.getId()) .build(); likedUnivApplyInfoRepository.save(likedUnivApplyInfo); return new LikeResultResponse(LIKE_SUCCESS_MESSAGE); @@ -58,7 +58,7 @@ public LikeResultResponse likeUnivApplyInfo(SiteUser siteUser, Long univApplyInf public LikeResultResponse cancelLikeUnivApplyInfo(SiteUser siteUser, long univApplyInfoId) { UnivApplyInfo univApplyInfo = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); - Optional optionalLikedUnivApplyInfo = likedUnivApplyInfoRepository.findBySiteUserAndUnivApplyInfo(siteUser, univApplyInfo); + Optional optionalLikedUnivApplyInfo = likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(siteUser.getId(), univApplyInfo.getId()); if (optionalLikedUnivApplyInfo.isEmpty()) { throw new CustomException(NOT_LIKED_UNIV_APPLY_INFO); } @@ -73,7 +73,7 @@ public LikeResultResponse cancelLikeUnivApplyInfo(SiteUser siteUser, long univAp @Transactional(readOnly = true) public IsLikeResponse getIsLiked(SiteUser siteUser, Long univApplyInfoId) { UnivApplyInfo univApplyInfo = univApplyInfoRepository.getUnivApplyInfoById(univApplyInfoId); - boolean isLike = likedUnivApplyInfoRepository.findBySiteUserAndUnivApplyInfo(siteUser, univApplyInfo).isPresent(); + boolean isLike = likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId(siteUser.getId(), univApplyInfo.getId()).isPresent(); return new IsLikeResponse(isLike); } } diff --git a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java index aa6f34f79..eaff6eec9 100644 --- a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java +++ b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java @@ -37,7 +37,7 @@ public class UnivApplyInfoRecommendService { public UnivApplyInfoRecommendsResponse getPersonalRecommends(SiteUser siteUser) { // 맞춤 추천 대학교를 불러온다. List personalRecommends = univApplyInfoRepository - .findAllBySiteUsersInterestedCountryOrRegionAndTerm(siteUser, term); + .findAllBySiteUsersInterestedCountryOrRegionAndTerm(siteUser.getId(), term); List trimmedRecommends = personalRecommends.subList(0, Math.min(RECOMMEND_UNIV_APPLY_INFO_NUM, personalRecommends.size())); Collections.shuffle(trimmedRecommends); @@ -56,7 +56,8 @@ private List getGeneralRecommendsExcludingSelected(List generalRecommend = new ArrayList<>(generalUnivApplyInfoRecommendService.getGeneralRecommends()); generalRecommend.removeAll(alreadyPicked); Collections.shuffle(generalRecommend); - return generalRecommend.subList(0, RECOMMEND_UNIV_APPLY_INFO_NUM - alreadyPicked.size()); + int needed = RECOMMEND_UNIV_APPLY_INFO_NUM - alreadyPicked.size(); + return generalRecommend.subList(0, Math.min(needed, generalRecommend.size())); } /* diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index b1beb524b..433ccb209 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -41,7 +41,7 @@ VALUES ('BN', '브루나이', 'ASIA'), ('MY', '말레이시아', 'ASIA'), ('RU', '러시아', 'EUROPE'); -INSERT INTO site_user (email, nickname, profile_image_url, preparation_stage, role, password, auth_type) +INSERT INTO site_user (email, nickname, profile_image_url, exchange_status, role, password, auth_type) VALUES ('test@test.email', 'yonso', 'https://github.com/nayonsoso.png', 'CONSIDERING', 'MENTEE', '$2a$10$psmwlxPfqWnIlq9JrlQJkuXr1XtjRNsyVOgcTWYZub5jFfn0TML76', 'EMAIL'); -- 12341234 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 a45e548ec..d0340931d 100644 --- a/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java +++ b/src/test/java/com/example/solidconnection/application/service/ApplicationSubmissionServiceTest.java @@ -84,7 +84,7 @@ void setUp() { ApplicationSubmissionResponse response = applicationSubmissionService.apply(user, request); // then - Application savedApplication = applicationRepository.findBySiteUserAndTerm(user, term).orElseThrow(); + Application savedApplication = applicationRepository.findBySiteUserIdAndTerm(user.getId(), term).orElseThrow(); assertAll( () -> assertThat(response.applyCount()) .isEqualTo(savedApplication.getUpdateCount()), diff --git a/src/test/java/com/example/solidconnection/location/country/fixture/CountryFixtureBuilder.java b/src/test/java/com/example/solidconnection/location/country/fixture/CountryFixtureBuilder.java index 85fdb466f..2f6ce7011 100644 --- a/src/test/java/com/example/solidconnection/location/country/fixture/CountryFixtureBuilder.java +++ b/src/test/java/com/example/solidconnection/location/country/fixture/CountryFixtureBuilder.java @@ -37,6 +37,6 @@ public CountryFixtureBuilder region(Region region) { public Country findOrCreate() { return countryRepositoryForTest.findByCode(code) - .orElseGet(() -> countryRepositoryForTest.save(new Country(code, koreanName, region))); + .orElseGet(() -> countryRepositoryForTest.save(new Country(code, koreanName, region.getCode()))); } } diff --git a/src/test/java/com/example/solidconnection/score/fixture/GpaScoreFixtureBuilder.java b/src/test/java/com/example/solidconnection/score/fixture/GpaScoreFixtureBuilder.java index 51c2d0569..f95f31e2c 100644 --- a/src/test/java/com/example/solidconnection/score/fixture/GpaScoreFixtureBuilder.java +++ b/src/test/java/com/example/solidconnection/score/fixture/GpaScoreFixtureBuilder.java @@ -39,7 +39,6 @@ public GpaScoreFixtureBuilder siteUser(SiteUser siteUser) { public GpaScore create() { GpaScore gpaScore = new GpaScore(gpa, siteUser); - gpaScore.setSiteUser(siteUser); gpaScore.setVerifyStatus(verifyStatus); return gpaScoreRepository.save(gpaScore); } diff --git a/src/test/java/com/example/solidconnection/score/fixture/LanguageTestScoreFixtureBuilder.java b/src/test/java/com/example/solidconnection/score/fixture/LanguageTestScoreFixtureBuilder.java index b2908bd93..aa7c4bdf5 100644 --- a/src/test/java/com/example/solidconnection/score/fixture/LanguageTestScoreFixtureBuilder.java +++ b/src/test/java/com/example/solidconnection/score/fixture/LanguageTestScoreFixtureBuilder.java @@ -39,7 +39,6 @@ public LanguageTestScoreFixtureBuilder siteUser(SiteUser siteUser) { public LanguageTestScore create() { LanguageTestScore languageTestScore = new LanguageTestScore(languageTest, siteUser); - languageTestScore.setSiteUser(siteUser); languageTestScore.setVerifyStatus(verifyStatus); return languageTestScoreRepository.save(languageTestScore); } diff --git a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java index 62732f1c1..85fdfd4cf 100644 --- a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java +++ b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java @@ -193,14 +193,14 @@ void setUp() { } private int createLikedUnivApplyInfos(SiteUser testUser) { - LikedUnivApplyInfo likedUnivApplyInfo1 = new LikedUnivApplyInfo(null, univApplyInfoFixture.괌대학_A_지원_정보(), testUser); - LikedUnivApplyInfo likedUnivApplyInfo2 = new LikedUnivApplyInfo(null, univApplyInfoFixture.메이지대학_지원_정보(), testUser); - LikedUnivApplyInfo likedUnivApplyInfo3 = new LikedUnivApplyInfo(null, univApplyInfoFixture.코펜하겐IT대학_지원_정보(), testUser); + LikedUnivApplyInfo likedUnivApplyInfo1 = new LikedUnivApplyInfo(null, univApplyInfoFixture.괌대학_A_지원_정보().getId(), testUser.getId()); + LikedUnivApplyInfo likedUnivApplyInfo2 = new LikedUnivApplyInfo(null, univApplyInfoFixture.메이지대학_지원_정보().getId(), testUser.getId()); + LikedUnivApplyInfo likedUnivApplyInfo3 = new LikedUnivApplyInfo(null, univApplyInfoFixture.코펜하겐IT대학_지원_정보().getId(), testUser.getId()); likedUnivApplyInfoRepository.save(likedUnivApplyInfo1); likedUnivApplyInfoRepository.save(likedUnivApplyInfo2); likedUnivApplyInfoRepository.save(likedUnivApplyInfo3); - return likedUnivApplyInfoRepository.countBySiteUser_Id(testUser.getId()); + return likedUnivApplyInfoRepository.countBySiteUserId(testUser.getId()); } private MockMultipartFile createValidImageFile() { diff --git a/src/test/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepositoryTest.java b/src/test/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepositoryTest.java index 1d3094e31..59b09d628 100644 --- a/src/test/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepositoryTest.java +++ b/src/test/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepositoryTest.java @@ -81,8 +81,8 @@ class 사용자와_좋아요한_대학은_복합_유니크_제약조건을_갖 private LikedUnivApplyInfo createLikedUnivApplyInfo(SiteUser siteUser, UnivApplyInfo univApplyInfo) { return LikedUnivApplyInfo.builder() - .siteUser(siteUser) - .univApplyInfo(univApplyInfo) + .siteUserId(siteUser.getId()) + .univApplyInfoId(univApplyInfo.getId()) .build(); } } diff --git a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoLikeServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoLikeServiceTest.java index 548ddd9f5..8867639e5 100644 --- a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoLikeServiceTest.java @@ -61,8 +61,8 @@ class 대학_지원_정보_좋아요를_등록한다 { // then assertAll( () -> assertThat(response.result()).isEqualTo(LIKE_SUCCESS_MESSAGE), - () -> assertThat(likedUnivApplyInfoRepository.findBySiteUserAndUnivApplyInfo( - user, 괌대학_A_지원_정보 + () -> assertThat(likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId( + user.getId(), 괌대학_A_지원_정보.getId() )).isPresent() ); } @@ -93,8 +93,8 @@ class 대학_지원_정보_좋아요를_취소한다 { // then assertAll( () -> assertThat(response.result()).isEqualTo(LIKE_CANCELED_MESSAGE), - () -> assertThat(likedUnivApplyInfoRepository.findBySiteUserAndUnivApplyInfo( - user, 괌대학_A_지원_정보 + () -> assertThat(likedUnivApplyInfoRepository.findBySiteUserIdAndUnivApplyInfoId( + user.getId(), 괌대학_A_지원_정보.getId() )).isEmpty() ); } @@ -153,8 +153,8 @@ class 대학_지원_정보_좋아요를_취소한다 { private void saveLikedUniversity(SiteUser siteUser, UnivApplyInfo univApplyInfo) { LikedUnivApplyInfo likedUnivApplyInfo = LikedUnivApplyInfo.builder() - .siteUser(siteUser) - .univApplyInfo(univApplyInfo) + .siteUserId(siteUser.getId()) + .univApplyInfoId(univApplyInfo.getId()) .build(); likedUnivApplyInfoRepository.save(likedUnivApplyInfo); } diff --git a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java index c6bf60b9b..96e8bf81d 100644 --- a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java @@ -143,11 +143,9 @@ void setUp() { .hasSize(RECOMMEND_UNIV_APPLY_INFO_NUM) .containsExactlyInAnyOrderElementsOf( generalUnivApplyInfoRecommendService.getGeneralRecommends().stream() - .map(UnivApplyInfoPreviewResponse::from) - .toList() + .map(UnivApplyInfoPreviewResponse::from).toList() ); } - @Test void 일반_추천_대학_지원_정보를_조회한다() { // when