From b6037ab22ad018a93781deaae4360681d03170bd Mon Sep 17 00:00:00 2001 From: Yeonri Date: Tue, 1 Jul 2025 15:39:04 +0900 Subject: [PATCH 01/18] =?UTF-8?q?refactor:=20community=20=EB=8F=84?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=EC=A0=9C=EC=99=B8=20=EC=97=B0=EA=B4=80?= =?UTF-8?q?=EA=B4=80=EA=B3=84=20=EC=82=AD=EC=A0=9C=20-=20Application,=20Co?= =?UTF-8?q?untry,=20GpaScore,=20InterestedCountry/Region,=20LanguageTestSc?= =?UTF-8?q?ore,=20LikedUniversity.=20SiteUser,=20UnivApplyInfo=20=EB=8F=84?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=EC=88=98=EC=A0=95=20-=20=EC=97=B0?= =?UTF-8?q?=EA=B4=80=EA=B4=80=EA=B3=84=20=EC=82=AD=EC=A0=9C=20=EB=B0=8F=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=9E=90=20parameter=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EC=BF=BC=EB=A6=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=8B=A4=EC=88=98=20-=20test=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/domain/Application.java | 10 ++-- .../dto/UniversityApplicantsResponse.java | 2 +- .../repository/ApplicationRepository.java | 12 ++--- .../service/ApplicationQueryService.java | 4 +- .../service/ApplicationSubmissionService.java | 6 +-- .../location/country/domain/Country.java | 8 +-- .../country/domain/InterestedCountry.java | 20 +++----- .../InterestedCountryRepository.java | 2 +- .../region/domain/InterestedRegion.java | 20 +++----- .../InterestedRegionRepository.java | 2 +- .../score/domain/GpaScore.java | 13 +---- .../score/domain/LanguageTestScore.java | 13 +---- .../score/repository/GpaScoreRepository.java | 6 ++- .../LanguageTestScoreRepository.java | 6 ++- .../custom/GpaScoreFilterRepositoryImpl.java | 4 +- ...LanguageTestScoreFilterRepositoryImpl.java | 4 +- .../score/service/ScoreService.java | 50 ++++++------------- .../siteuser/domain/SiteUser.java | 6 --- .../repository/LikedUniversityRepository.java | 17 +++++-- .../siteuser/service/MyPageService.java | 10 ++-- .../university/domain/LikedUniversity.java | 18 ++----- .../university/domain/UnivApplyInfo.java | 7 ++- .../UniversityInfoForApplyRepository.java | 34 ++++++------- .../UniversityFilterRepositoryImpl.java | 13 ++--- .../service/UniversityLikeService.java | 20 +++++--- .../service/UniversityRecommendService.java | 2 +- .../ApplicationSubmissionServiceTest.java | 2 +- .../fixture/CountryFixtureBuilder.java | 2 +- .../score/fixture/GpaScoreFixtureBuilder.java | 1 - .../LanguageTestScoreFixtureBuilder.java | 1 - .../siteuser/service/MyPageServiceTest.java | 8 +-- .../UniversityLikeRepositoryTest.java | 4 +- .../service/UniversityLikeServiceTest.java | 12 ++--- 33 files changed, 146 insertions(+), 193 deletions(-) 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 5f982410e..8dc371a07 100644 --- a/src/main/java/com/example/solidconnection/application/domain/Application.java +++ b/src/main/java/com/example/solidconnection/application/domain/Application.java @@ -74,15 +74,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; @@ -100,7 +100,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; @@ -121,7 +121,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/UniversityApplicantsResponse.java b/src/main/java/com/example/solidconnection/application/dto/UniversityApplicantsResponse.java index 1fe24546f..5a58f0898 100644 --- a/src/main/java/com/example/solidconnection/application/dto/UniversityApplicantsResponse.java +++ b/src/main/java/com/example/solidconnection/application/dto/UniversityApplicantsResponse.java @@ -24,6 +24,6 @@ public static UniversityApplicantsResponse of(UnivApplyInfo univApplyInfo, List< } private static boolean isUsers(Application application, SiteUser siteUser) { - return application.getSiteUser().getId().equals(siteUser.getId()); + return application.getSiteUserId() == siteUser.getId(); } } diff --git a/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java b/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java index 0cbf1cf68..5995d11d1 100644 --- a/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java +++ b/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java @@ -22,7 +22,6 @@ public interface ApplicationRepository extends JpaRepository @Query(""" SELECT a FROM Application a - JOIN FETCH a.siteUser WHERE (a.firstChoiceUnivApplyInfoId IN :universityIds OR a.secondChoiceUnivApplyInfoId IN :universityIds OR a.thirdChoiceUnivApplyInfoId IN :universityIds) @@ -30,19 +29,20 @@ public interface ApplicationRepository extends JpaRepository AND a.term = :term AND a.isDelete = false """) - List findAllByUnivApplyInfoIds(@Param("universityIds") List universityIds, @Param("status") VerifyStatus status, @Param("term") String term); + List findAllByUnivApplyInfoIds( + @Param("universityIds") List universityIds, @Param("status") VerifyStatus status, @Param("term") String term); @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 dbfa28990..62c4ce731 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 universityInfoForApplyIds = 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 ea44840ee..47384e9f4 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 secondChoiceUniversityId = universityChoiceRequest.secondChoiceUniversityId(); Long thirdChoiceUniversityId = universityChoiceRequest.thirdChoiceUniversityId(); - 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..38ea46f71 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 @@ -23,12 +23,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..d7bde3d08 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,13 +1,7 @@ package com.example.solidconnection.location.country.domain; import com.example.solidconnection.siteuser.domain.SiteUser; -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 jakarta.persistence.*; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -27,14 +21,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 2eacc2ca9..18449e32a 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 @@ -9,5 +9,5 @@ @Repository 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..3800bffed 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,13 +1,7 @@ package com.example.solidconnection.location.region.domain; import com.example.solidconnection.siteuser.domain.SiteUser; -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 jakarta.persistence.*; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -27,14 +21,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 90d860b3c..cc0177c9b 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 @@ -9,5 +9,5 @@ @Repository 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 0156dae9a..ed45eff3b 100644 --- a/src/main/java/com/example/solidconnection/score/domain/GpaScore.java +++ b/src/main/java/com/example/solidconnection/score/domain/GpaScore.java @@ -38,24 +38,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 f2257561d..00d181399 100644 --- a/src/main/java/com/example/solidconnection/score/domain/LanguageTestScore.java +++ b/src/main/java/com/example/solidconnection/score/domain/LanguageTestScore.java @@ -38,21 +38,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 5610c8de3..7a916d64c 100644 --- a/src/main/java/com/example/solidconnection/score/repository/GpaScoreRepository.java +++ b/src/main/java/com/example/solidconnection/score/repository/GpaScoreRepository.java @@ -6,12 +6,14 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Optional; @Repository public interface GpaScoreRepository extends JpaRepository, GpaScoreFilterRepository { - Optional findGpaScoreBySiteUser(SiteUser siteUser); + Optional findGpaScoreBySiteUserId(long siteUserId); - Optional findGpaScoreBySiteUserAndId(SiteUser siteUser, Long id); + Optional findGpaScoreBySiteUserIdAndId(long siteUser, 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 1934a0612..0c5d44180 100644 --- a/src/main/java/com/example/solidconnection/score/repository/LanguageTestScoreRepository.java +++ b/src/main/java/com/example/solidconnection/score/repository/LanguageTestScoreRepository.java @@ -7,12 +7,14 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Optional; @Repository 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 siteUser, 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 a90961c3d..12aa626f5 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 28baaf521..555f7923c 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..a11756e6a 100644 --- a/src/main/java/com/example/solidconnection/score/service/ScoreService.java +++ b/src/main/java/com/example/solidconnection/score/service/ScoreService.java @@ -43,17 +43,10 @@ public class ScoreService { 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 savedNewGpaScore = gpaScoreRepository.save(newGpaScore); + return savedNewGpaScore.getId(); } @Transactional @@ -61,42 +54,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) + .collect(Collectors.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 98c18b56a..479e628ed 100644 --- a/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java +++ b/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java @@ -88,12 +88,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/repository/LikedUniversityRepository.java b/src/main/java/com/example/solidconnection/siteuser/repository/LikedUniversityRepository.java index f0d328c0a..13ed63a65 100644 --- a/src/main/java/com/example/solidconnection/siteuser/repository/LikedUniversityRepository.java +++ b/src/main/java/com/example/solidconnection/siteuser/repository/LikedUniversityRepository.java @@ -4,15 +4,26 @@ import com.example.solidconnection.university.domain.LikedUniversity; 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 LikedUniversityRepository 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 LikedUniversity 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/siteuser/service/MyPageService.java b/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java index 7e22fd4bf..568610afc 100644 --- a/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java +++ b/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java @@ -9,6 +9,7 @@ import com.example.solidconnection.siteuser.repository.LikedUniversityRepository; import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.university.domain.LikedUniversity; +import com.example.solidconnection.university.domain.UnivApplyInfo; import com.example.solidconnection.university.dto.UniversityInfoForApplyPreviewResponse; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -39,7 +40,7 @@ public class MyPageService { * */ @Transactional(readOnly = true) public MyPageResponse getMyPageInfo(SiteUser siteUser) { - int likedUniversityCount = likedUniversityRepository.countBySiteUser_Id(siteUser.getId()); + int likedUniversityCount = likedUniversityRepository.countBySiteUserId(siteUser.getId()); return MyPageResponse.of(siteUser, likedUniversityCount); } @@ -95,9 +96,10 @@ private boolean isDefaultProfileImage(String profileImageUrl) { * */ @Transactional(readOnly = true) public List getWishUniversity(SiteUser siteUser) { - List likedUniversities = likedUniversityRepository.findAllBySiteUser_Id(siteUser.getId()); - return likedUniversities.stream() - .map(likedUniversity -> UniversityInfoForApplyPreviewResponse.from(likedUniversity.getUnivApplyInfo())) + List univApplyInfos = likedUniversityRepository.findUnivApplyInfosBySiteUserId(siteUser.getId()); + + return univApplyInfos.stream() + .map(UniversityInfoForApplyPreviewResponse::from) .toList(); } } diff --git a/src/main/java/com/example/solidconnection/university/domain/LikedUniversity.java b/src/main/java/com/example/solidconnection/university/domain/LikedUniversity.java index 036346d5a..2c10a5444 100644 --- a/src/main/java/com/example/solidconnection/university/domain/LikedUniversity.java +++ b/src/main/java/com/example/solidconnection/university/domain/LikedUniversity.java @@ -1,14 +1,7 @@ package com.example.solidconnection.university.domain; import com.example.solidconnection.siteuser.domain.SiteUser; -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 jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -31,10 +24,9 @@ public class LikedUniversity { @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 47edd15c8..a2511e1ec 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,13 +77,15 @@ 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) { this.languageRequirements.add(languageRequirements); } + + } diff --git a/src/main/java/com/example/solidconnection/university/repository/UniversityInfoForApplyRepository.java b/src/main/java/com/example/solidconnection/university/repository/UniversityInfoForApplyRepository.java index 1ef541334..a8315171c 100644 --- a/src/main/java/com/example/solidconnection/university/repository/UniversityInfoForApplyRepository.java +++ b/src/main/java/com/example/solidconnection/university/repository/UniversityInfoForApplyRepository.java @@ -30,24 +30,22 @@ public interface UniversityInfoForApplyRepository extends JpaRepository findByUniversitiesAndTerm(@Param("universities") List universities, @Param("term") String term); @Query(""" - SELECT uifa - FROM UnivApplyInfo uifa - JOIN University u ON uifa.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 uifa.term = :term - """) - List findUniversityInfoForAppliesBySiteUsersInterestedCountryOrRegionAndTerm(@Param("siteUser") SiteUser siteUser, @Param("term") String term); + SELECT uifa + FROM UnivApplyInfo uifa + JOIN University u ON uifa.university = u + WHERE (u.country IN ( + SELECT ic.countryCode + FROM InterestedCountry ic + WHERE ic.siteUserId = :siteUserId + ) + OR u.region IN ( + SELECT ir.regionCode + FROM InterestedRegion ir + WHERE ir.siteUserId = :siteUserId + )) + AND uifa.term = :term + """) + List findUniversityInfoForAppliesBySiteUsersInterestedCountryOrRegionAndTerm(@Param("siteUserId") Long siteUserId, @Param("term") String term); @Query(value = """ SELECT * diff --git a/src/main/java/com/example/solidconnection/university/repository/custom/UniversityFilterRepositoryImpl.java b/src/main/java/com/example/solidconnection/university/repository/custom/UniversityFilterRepositoryImpl.java index ee8416b9c..414ea242a 100644 --- a/src/main/java/com/example/solidconnection/university/repository/custom/UniversityFilterRepositoryImpl.java +++ b/src/main/java/com/example/solidconnection/university/repository/custom/UniversityFilterRepositoryImpl.java @@ -32,17 +32,15 @@ public List findByRegionCodeAndKeywords(String regionCode, List findByRegionCodeAndKeywords(String regionCode, List keywords) { @@ -86,7 +81,7 @@ public List findByRegionCodeAndKeywordsAndLanguageTestTypeAndTest .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/UniversityLikeService.java b/src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java index 7544ed7a8..b567c01b3 100644 --- a/src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java +++ b/src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java @@ -17,6 +17,7 @@ import static com.example.solidconnection.common.exception.ErrorCode.ALREADY_LIKED_UNIVERSITY; import static com.example.solidconnection.common.exception.ErrorCode.NOT_LIKED_UNIVERSITY; +import static com.example.solidconnection.common.exception.ErrorCode.UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND; @RequiredArgsConstructor @Service @@ -36,21 +37,24 @@ public class UniversityLikeService { * */ @Transactional public LikeResultResponse likeUniversity(SiteUser siteUser, Long universityInfoForApplyId) { - UnivApplyInfo univApplyInfo = universityInfoForApplyRepository.getUniversityInfoForApplyById(universityInfoForApplyId); - - Optional optionalLikedUniversity = likedUniversityRepository.findBySiteUserAndUnivApplyInfo(siteUser, univApplyInfo); - if (optionalLikedUniversity.isPresent()) { + if (likedUniversityRepository.existsBySiteUserIdAndUnivApplyInfoId(siteUser.getId(), universityInfoForApplyId)) { throw new CustomException(ALREADY_LIKED_UNIVERSITY); } + if (!universityInfoForApplyRepository.existsById(universityInfoForApplyId)) { + throw new CustomException(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND); + } + LikedUniversity likedUniversity = LikedUniversity.builder() - .univApplyInfo(univApplyInfo) - .siteUser(siteUser) + .univApplyInfoId(universityInfoForApplyId) + .siteUserId(siteUser.getId()) .build(); + likedUniversityRepository.save(likedUniversity); return new LikeResultResponse(LIKE_SUCCESS_MESSAGE); } + /* * 대학교 '좋아요'를 취소한다. * */ @@ -58,7 +62,7 @@ public LikeResultResponse likeUniversity(SiteUser siteUser, Long universityInfoF public LikeResultResponse cancelLikeUniversity(SiteUser siteUser, long universityInfoForApplyId) throws CustomException { UnivApplyInfo univApplyInfo = universityInfoForApplyRepository.getUniversityInfoForApplyById(universityInfoForApplyId); - Optional optionalLikedUniversity = likedUniversityRepository.findBySiteUserAndUnivApplyInfo(siteUser, univApplyInfo); + Optional optionalLikedUniversity = likedUniversityRepository.findBySiteUserIdAndUnivApplyInfoId(siteUser.getId(), univApplyInfo.getId()); if (optionalLikedUniversity.isEmpty()) { throw new CustomException(NOT_LIKED_UNIVERSITY); } @@ -73,7 +77,7 @@ public LikeResultResponse cancelLikeUniversity(SiteUser siteUser, long universit @Transactional(readOnly = true) public IsLikeResponse getIsLiked(SiteUser siteUser, Long universityInfoForApplyId) { UnivApplyInfo univApplyInfo = universityInfoForApplyRepository.getUniversityInfoForApplyById(universityInfoForApplyId); - boolean isLike = likedUniversityRepository.findBySiteUserAndUnivApplyInfo(siteUser, univApplyInfo).isPresent(); + boolean isLike = likedUniversityRepository.findBySiteUserIdAndUnivApplyInfoId(siteUser.getId(), univApplyInfo.getId()).isPresent(); return new IsLikeResponse(isLike); } } diff --git a/src/main/java/com/example/solidconnection/university/service/UniversityRecommendService.java b/src/main/java/com/example/solidconnection/university/service/UniversityRecommendService.java index 94447316d..4c6261fd3 100644 --- a/src/main/java/com/example/solidconnection/university/service/UniversityRecommendService.java +++ b/src/main/java/com/example/solidconnection/university/service/UniversityRecommendService.java @@ -37,7 +37,7 @@ public class UniversityRecommendService { public UniversityRecommendsResponse getPersonalRecommends(SiteUser siteUser) { // 맞춤 추천 대학교를 불러온다. List personalRecommends = universityInfoForApplyRepository - .findUniversityInfoForAppliesBySiteUsersInterestedCountryOrRegionAndTerm(siteUser, term); + .findUniversityInfoForAppliesBySiteUsersInterestedCountryOrRegionAndTerm(siteUser.getId(), term); List trimmedRecommendUniversities = personalRecommends.subList(0, Math.min(RECOMMEND_UNIVERSITY_NUM, personalRecommends.size())); Collections.shuffle(trimmedRecommendUniversities); 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 4d23073f7..b1716e023 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 7943008b4..a5a18e006 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 fd5a8d417..00e9d577e 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 59e0d6455..59737718a 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 createLikedUniversities(SiteUser testUser) { - LikedUniversity likedUniversity1 = new LikedUniversity(null, univApplyInfoFixture.괌대학_A_지원_정보(), testUser); - LikedUniversity likedUniversity2 = new LikedUniversity(null, univApplyInfoFixture.메이지대학_지원_정보(), testUser); - LikedUniversity likedUniversity3 = new LikedUniversity(null, univApplyInfoFixture.코펜하겐IT대학_지원_정보(), testUser); + LikedUniversity likedUniversity1 = new LikedUniversity(null, univApplyInfoFixture.괌대학_A_지원_정보().getId(), testUser.getId()); + LikedUniversity likedUniversity2 = new LikedUniversity(null, univApplyInfoFixture.메이지대학_지원_정보().getId(), testUser.getId()); + LikedUniversity likedUniversity3 = new LikedUniversity(null, univApplyInfoFixture.코펜하겐IT대학_지원_정보().getId(), testUser.getId()); likedUniversityRepository.save(likedUniversity1); likedUniversityRepository.save(likedUniversity2); likedUniversityRepository.save(likedUniversity3); - return likedUniversityRepository.countBySiteUser_Id(testUser.getId()); + return likedUniversityRepository.countBySiteUserId(testUser.getId()); } private MockMultipartFile createValidImageFile() { diff --git a/src/test/java/com/example/solidconnection/university/repository/UniversityLikeRepositoryTest.java b/src/test/java/com/example/solidconnection/university/repository/UniversityLikeRepositoryTest.java index 1d34597be..9db7831fe 100644 --- a/src/test/java/com/example/solidconnection/university/repository/UniversityLikeRepositoryTest.java +++ b/src/test/java/com/example/solidconnection/university/repository/UniversityLikeRepositoryTest.java @@ -82,8 +82,8 @@ class 사용자와_좋아요한_대학은_복합_유니크_제약조건을_갖 private LikedUniversity createLikedUniversity(SiteUser siteUser, UnivApplyInfo univApplyInfo) { return LikedUniversity.builder() - .siteUser(siteUser) - .univApplyInfo(univApplyInfo) + .siteUserId(siteUser.getId()) + .univApplyInfoId(univApplyInfo.getId()) .build(); } } diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java index 729c74c3b..d0b07e37c 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityLikeServiceTest.java @@ -61,8 +61,8 @@ class 대학_좋아요를_등록한다 { // then assertAll( () -> assertThat(response.result()).isEqualTo(LIKE_SUCCESS_MESSAGE), - () -> assertThat(likedUniversityRepository.findBySiteUserAndUnivApplyInfo( - user, 괌대학_A_지원_정보 + () -> assertThat(likedUniversityRepository.findBySiteUserIdAndUnivApplyInfoId( + user.getId(), 괌대학_A_지원_정보.getId() )).isPresent() ); } @@ -93,8 +93,8 @@ class 대학_좋아요를_취소한다 { // then assertAll( () -> assertThat(response.result()).isEqualTo(LIKE_CANCELED_MESSAGE), - () -> assertThat(likedUniversityRepository.findBySiteUserAndUnivApplyInfo( - user, 괌대학_A_지원_정보 + () -> assertThat(likedUniversityRepository.findBySiteUserIdAndUnivApplyInfoId( + user.getId(), 괌대학_A_지원_정보.getId() )).isEmpty() ); } @@ -153,8 +153,8 @@ class 대학_좋아요를_취소한다 { private void saveLikedUniversity(SiteUser siteUser, UnivApplyInfo univApplyInfo) { LikedUniversity likedUniversity = LikedUniversity.builder() - .siteUser(siteUser) - .univApplyInfo(univApplyInfo) + .siteUserId(siteUser.getId()) + .univApplyInfoId(univApplyInfo.getId()) .build(); likedUniversityRepository.save(likedUniversity); } From df1014944510fbaf08f4bd169c34bf7278e65d7b Mon Sep 17 00:00:00 2001 From: Yeonri Date: Tue, 1 Jul 2025 19:57:16 +0900 Subject: [PATCH 02/18] =?UTF-8?q?fix:=20application,=20university=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95=20-=20=EC=97=B0=EA=B4=80?= =?UTF-8?q?=EA=B4=80=EA=B3=84=20=EB=B3=80=EA=B2=BD=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=A5=B8=20transaction=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0=20-=20=EC=BF=BC=EB=A6=AC=20=EC=9D=BC=EB=B6=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95,=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=9D=BC=EB=B6=80=20=EC=88=98=EC=A0=95=20-=20Gener?= =?UTF-8?q?alUniversityRecommendService=20=EB=A1=9C=EC=A7=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UniversityInfoForApplyRepository.java | 28 ++++++++++--------- .../UniversityFilterRepositoryImpl.java | 5 +++- .../GeneralUniversityRecommendService.java | 28 +++++++++++-------- ...GeneralUniversityRecommendServiceTest.java | 1 - .../UniversityRecommendServiceTest.java | 20 +++++-------- 5 files changed, 42 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/example/solidconnection/university/repository/UniversityInfoForApplyRepository.java b/src/main/java/com/example/solidconnection/university/repository/UniversityInfoForApplyRepository.java index a8315171c..961d78735 100644 --- a/src/main/java/com/example/solidconnection/university/repository/UniversityInfoForApplyRepository.java +++ b/src/main/java/com/example/solidconnection/university/repository/UniversityInfoForApplyRepository.java @@ -4,6 +4,7 @@ import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.university.domain.UnivApplyInfo; import com.example.solidconnection.university.domain.University; +import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -30,32 +31,33 @@ public interface UniversityInfoForApplyRepository extends JpaRepository findByUniversitiesAndTerm(@Param("universities") List universities, @Param("term") String term); @Query(""" - SELECT uifa + SELECT DISTINCT uifa FROM UnivApplyInfo uifa - JOIN University u ON uifa.university = u - WHERE (u.country IN ( + LEFT JOIN FETCH uifa.languageRequirements lr + JOIN FETCH uifa.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 u.region IN ( + OR r.code IN ( SELECT ir.regionCode FROM InterestedRegion ir WHERE ir.siteUserId = :siteUserId )) AND uifa.term = :term - """) + """) List findUniversityInfoForAppliesBySiteUsersInterestedCountryOrRegionAndTerm(@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) + SELECT u.* + FROM university_info_for_apply u + WHERE u.term = :term + ORDER BY RAND() + LIMIT :limitNum + """, nativeQuery = true) List findRandomByTerm(@Param("term") String term, @Param("limitNum") int limitNum); - default UnivApplyInfo getUniversityInfoForApplyById(Long id) { return findById(id) .orElseThrow(() -> new CustomException(UNIVERSITY_INFO_FOR_APPLY_NOT_FOUND)); diff --git a/src/main/java/com/example/solidconnection/university/repository/custom/UniversityFilterRepositoryImpl.java b/src/main/java/com/example/solidconnection/university/repository/custom/UniversityFilterRepositoryImpl.java index 414ea242a..a330f5f8b 100644 --- a/src/main/java/com/example/solidconnection/university/repository/custom/UniversityFilterRepositoryImpl.java +++ b/src/main/java/com/example/solidconnection/university/repository/custom/UniversityFilterRepositoryImpl.java @@ -49,7 +49,10 @@ public List findByRegionCodeAndKeywords(String regionCode, List keywords) { diff --git a/src/main/java/com/example/solidconnection/university/service/GeneralUniversityRecommendService.java b/src/main/java/com/example/solidconnection/university/service/GeneralUniversityRecommendService.java index af2921c9a..6b1a3676e 100644 --- a/src/main/java/com/example/solidconnection/university/service/GeneralUniversityRecommendService.java +++ b/src/main/java/com/example/solidconnection/university/service/GeneralUniversityRecommendService.java @@ -2,12 +2,11 @@ import com.example.solidconnection.university.domain.UnivApplyInfo; import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository; -import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.hibernate.Hibernate; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -17,19 +16,24 @@ @RequiredArgsConstructor public class GeneralUniversityRecommendService { - /* - * 해당 시기에 열리는 대학교들 중 랜덤으로 선택해서 목록을 구성한다. - * */ private final UniversityInfoForApplyRepository universityInfoForApplyRepository; - @Getter - private List recommendUniversities; - @Value("${university.term}") public String term; - @EventListener(ApplicationReadyEvent.class) - public void init() { - recommendUniversities = universityInfoForApplyRepository.findRandomByTerm(term, RECOMMEND_UNIVERSITY_NUM); + @Transactional(readOnly = true) // 트랜잭션 추가 + public List getRecommendUniversities() { + List universities = universityInfoForApplyRepository.findRandomByTerm(term, RECOMMEND_UNIVERSITY_NUM); + + universities.forEach(univ -> { + Hibernate.initialize(univ.getLanguageRequirements()); + Hibernate.initialize(univ.getUniversity()); + if (univ.getUniversity() != null) { + Hibernate.initialize(univ.getUniversity().getCountry()); + Hibernate.initialize(univ.getUniversity().getRegion()); + } + }); + + return universities; } } diff --git a/src/test/java/com/example/solidconnection/university/service/GeneralUniversityRecommendServiceTest.java b/src/test/java/com/example/solidconnection/university/service/GeneralUniversityRecommendServiceTest.java index 5152dfbb2..9b383e295 100644 --- a/src/test/java/com/example/solidconnection/university/service/GeneralUniversityRecommendServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/GeneralUniversityRecommendServiceTest.java @@ -40,7 +40,6 @@ void setUp() { univApplyInfoFixture.그라츠공과대학_지원_정보(); univApplyInfoFixture.린츠_카톨릭대학_지원_정보(); univApplyInfoFixture.메이지대학_지원_정보(); - generalUniversityRecommendService.init(); } @Test diff --git a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java b/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java index a1bfba10b..9b238a54a 100644 --- a/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UniversityRecommendServiceTest.java @@ -72,7 +72,6 @@ void setUp() { univApplyInfoFixture.그라츠공과대학_지원_정보(); univApplyInfoFixture.린츠_카톨릭대학_지원_정보(); univApplyInfoFixture.메이지대학_지원_정보(); - generalUniversityRecommendService.init(); } @Test @@ -136,18 +135,16 @@ void setUp() { @Test void 관심사_미설정_사용자는_일반_추천_대학을_조회한다() { // when - UniversityRecommendsResponse response = universityRecommendService.getPersonalRecommends(user); + UniversityRecommendsResponse personalResponse = universityRecommendService.getPersonalRecommends(user); + UniversityRecommendsResponse generalResponse = universityRecommendService.getGeneralRecommends(); // then - assertThat(response.recommendedUniversities()) + assertThat(personalResponse.recommendedUniversities()) .hasSize(RECOMMEND_UNIVERSITY_NUM) - .containsExactlyInAnyOrderElementsOf( - generalUniversityRecommendService.getRecommendUniversities().stream() - .map(UniversityInfoForApplyPreviewResponse::from) - .toList() - ); + .containsExactlyInAnyOrderElementsOf(generalResponse.recommendedUniversities()); } + @Test void 일반_추천_대학을_조회한다() { // when @@ -156,10 +153,7 @@ void setUp() { // then assertThat(response.recommendedUniversities()) .hasSize(RECOMMEND_UNIVERSITY_NUM) - .containsExactlyInAnyOrderElementsOf( - generalUniversityRecommendService.getRecommendUniversities().stream() - .map(UniversityInfoForApplyPreviewResponse::from) - .toList() - ); + .allMatch(univ -> univ.id() > 0) + .allMatch(univ -> univ.koreanName() != null); } } From 32cb72fb01a2c25177f2bb92b0a520883a10bb9b Mon Sep 17 00:00:00 2001 From: Yeonri Date: Tue, 1 Jul 2025 19:58:57 +0900 Subject: [PATCH 03/18] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20siteUser=20=EC=9E=AC=EC=A1=B0=ED=9A=8C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20-=20ScoreService=EC=97=90=EC=84=9C=20siteUser?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EB=8B=A4=EC=8B=9C=20=EB=B6=88?= =?UTF-8?q?=EB=9F=AC=EC=98=A4=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/solidconnection/score/service/ScoreService.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 a11756e6a..cf9313210 100644 --- a/src/main/java/com/example/solidconnection/score/service/ScoreService.java +++ b/src/main/java/com/example/solidconnection/score/service/ScoreService.java @@ -43,8 +43,7 @@ public class ScoreService { 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()); - SiteUser siteUser1 = siteUserRepository.findById(siteUser.getId()).orElseThrow(() -> new CustomException(USER_NOT_FOUND)); - GpaScore newGpaScore = new GpaScore(gpa, siteUser1); + GpaScore newGpaScore = new GpaScore(gpa, siteUser); GpaScore savedNewGpaScore = gpaScoreRepository.save(newGpaScore); return savedNewGpaScore.getId(); } From 2938a79c43175c41a3c69f991a1c0a4482a10760 Mon Sep 17 00:00:00 2001 From: Yeonri Date: Wed, 2 Jul 2025 12:27:48 +0900 Subject: [PATCH 04/18] =?UTF-8?q?refactor:=20=EC=88=98=EC=A0=95=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=EB=B0=98=EC=98=81=20-=20=EC=BB=A8=EB=B2=A4?= =?UTF-8?q?=EC=85=98,=20=ED=83=80=EC=9E=85=EC=88=98=EC=A0=95=20=EB=8B=A4?= =?UTF-8?q?=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/application/domain/Application.java | 2 -- .../application/dto/ApplicantsResponse.java | 3 ++- .../solidconnection/location/country/domain/Country.java | 2 -- .../location/country/domain/InterestedCountry.java | 8 +++++++- .../country/repository/InterestedCountryRepository.java | 2 +- .../location/region/domain/InterestedRegion.java | 8 +++++++- .../region/repository/InterestedRegionRepository.java | 1 + .../example/solidconnection/score/domain/GpaScore.java | 1 - .../solidconnection/score/domain/LanguageTestScore.java | 1 - .../score/repository/GpaScoreRepository.java | 6 +++--- .../score/repository/LanguageTestScoreRepository.java | 4 ++-- .../solidconnection/score/service/ScoreService.java | 6 ------ .../solidconnection/siteuser/domain/SiteUser.java | 2 -- .../university/domain/LikedUnivApplyInfo.java | 9 +++++++-- .../solidconnection/university/domain/UnivApplyInfo.java | 2 -- .../repository/LikedUnivApplyInfoRepository.java | 6 +++--- .../university/repository/UnivApplyInfoRepository.java | 1 - .../custom/UnivApplyInfoFilterRepositoryImpl.java | 1 - .../university/service/UniversityLikeService.java | 0 19 files changed, 33 insertions(+), 32 deletions(-) delete mode 100644 src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java 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 8dc371a07..fa0514af5 100644 --- a/src/main/java/com/example/solidconnection/application/domain/Application.java +++ b/src/main/java/com/example/solidconnection/application/domain/Application.java @@ -6,12 +6,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; 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 065cba380..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 { + 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 3800bffed..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,7 +1,13 @@ package com.example.solidconnection.location.region.domain; import com.example.solidconnection.siteuser.domain.SiteUser; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; 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 cc0177c9b..2d3b09954 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 @@ -9,5 +9,6 @@ @Repository public interface InterestedRegionRepository extends JpaRepository { + 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 ed45eff3b..1f7728dd9 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; 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 00d181399..9db8cb3e9 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; 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 7a916d64c..70e551d1b 100644 --- a/src/main/java/com/example/solidconnection/score/repository/GpaScoreRepository.java +++ b/src/main/java/com/example/solidconnection/score/repository/GpaScoreRepository.java @@ -2,7 +2,6 @@ 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 org.springframework.stereotype.Repository; @@ -14,6 +13,7 @@ public interface GpaScoreRepository extends JpaRepository, GpaSc Optional findGpaScoreBySiteUserId(long siteUserId); - Optional findGpaScoreBySiteUserIdAndId(long siteUser, Long id); - List findBySiteUserId(Long siteUserId); + 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 0c5d44180..2486249a8 100644 --- a/src/main/java/com/example/solidconnection/score/repository/LanguageTestScoreRepository.java +++ b/src/main/java/com/example/solidconnection/score/repository/LanguageTestScoreRepository.java @@ -2,7 +2,6 @@ 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 org.springframework.stereotype.Repository; @@ -16,5 +15,6 @@ public interface LanguageTestScoreRepository extends JpaRepository findLanguageTestScoreBySiteUserIdAndLanguageTest_LanguageTestType(long siteUserId, LanguageTestType languageTestType); Optional findLanguageTestScoreBySiteUserIdAndId(long siteUser, Long id); - List findBySiteUserId(Long siteUserId); + + List findBySiteUserId(long siteUserId); } 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 cf9313210..e0800883e 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; @@ -23,13 +22,9 @@ 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,7 +32,6 @@ 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) { 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 070690635..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; 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 8d5eb6ecd..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,7 +1,12 @@ package com.example.solidconnection.university.domain; -import com.example.solidconnection.siteuser.domain.SiteUser; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; 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 a2511e1ec..81d8b8392 100644 --- a/src/main/java/com/example/solidconnection/university/domain/UnivApplyInfo.java +++ b/src/main/java/com/example/solidconnection/university/domain/UnivApplyInfo.java @@ -86,6 +86,4 @@ public class UnivApplyInfo { public void addLanguageRequirements(LanguageRequirement languageRequirements) { this.languageRequirements.add(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 0d7d0f275..e5004dd75 100644 --- a/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java +++ b/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java @@ -1,6 +1,5 @@ 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; @@ -17,13 +16,14 @@ public interface LikedUnivApplyInfoRepository extends JpaRepository 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); + List findUnivApplyInfosBySiteUserId(@Param("siteUserId") long siteUserId); - boolean existsBySiteUserIdAndUnivApplyInfoId(Long siteUserId, Long univApplyInfoId); + 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 2c8a406bc..78dc9108d 100644 --- a/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java +++ b/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java @@ -1,7 +1,6 @@ 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.jpa.repository.JpaRepository; 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 d338c3067..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 @@ -47,7 +47,6 @@ public List findAllByRegionCodeAndKeywords(String regionCode, Lis .fetch(); } - private BooleanExpression regionCodeEq(QCountry country, String regionCode) { if (regionCode == null || regionCode.isEmpty()) { return Expressions.asBoolean(true).isTrue(); diff --git a/src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java b/src/main/java/com/example/solidconnection/university/service/UniversityLikeService.java deleted file mode 100644 index e69de29bb..000000000 From 541fed7c4ff46b57556acac7b0d26127047ade98 Mon Sep 17 00:00:00 2001 From: Yeonri Date: Wed, 2 Jul 2025 12:42:18 +0900 Subject: [PATCH 05/18] =?UTF-8?q?fix:=20conflict=20merge=20=EA=B3=BC?= =?UTF-8?q?=EC=A0=95=EC=97=90=EC=84=9C=20=EC=83=9D=EA=B8=B4=20=EB=8D=94?= =?UTF-8?q?=EB=AF=B8=20=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../siteuser/repository/LikedUniversityRepository.java | 0 .../university/repository/UniversityInfoForApplyRepository.java | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/java/com/example/solidconnection/siteuser/repository/LikedUniversityRepository.java delete mode 100644 src/main/java/com/example/solidconnection/university/repository/UniversityInfoForApplyRepository.java diff --git a/src/main/java/com/example/solidconnection/siteuser/repository/LikedUniversityRepository.java b/src/main/java/com/example/solidconnection/siteuser/repository/LikedUniversityRepository.java deleted file mode 100644 index e69de29bb..000000000 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 From 5cf0660da18b617e670369e1b1289a24bbd7a170 Mon Sep 17 00:00:00 2001 From: Yeonri Date: Wed, 2 Jul 2025 15:21:01 +0900 Subject: [PATCH 06/18] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20import=EB=AC=B8=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/solidconnection/score/service/ScoreService.java | 1 - 1 file changed, 1 deletion(-) 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 e0800883e..818665db0 100644 --- a/src/main/java/com/example/solidconnection/score/service/ScoreService.java +++ b/src/main/java/com/example/solidconnection/score/service/ScoreService.java @@ -16,7 +16,6 @@ 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; From b739ceb6df07c983d71a11137a43ee912d8c10fa Mon Sep 17 00:00:00 2001 From: Yeonri Date: Wed, 2 Jul 2025 20:52:30 +0900 Subject: [PATCH 07/18] =?UTF-8?q?refactor:=20Community=20=EC=97=B0?= =?UTF-8?q?=EA=B4=80=EA=B4=80=EA=B3=84=20=EB=A7=A4=ED=95=91=20=EC=88=98?= =?UTF-8?q?=EC=A0=95/=EC=82=AD=EC=A0=9C=20-=20Board,=20Comment,=20Post,=20?= =?UTF-8?q?PostLike=20=EC=97=B0=EA=B4=80=EA=B4=80=EA=B3=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95/=EC=82=AD=EC=A0=9C=20-=20=EC=97=B0=EA=B4=80=EA=B4=80?= =?UTF-8?q?=EA=B3=84=20=EC=88=98=EC=A0=95=EC=97=90=20=EB=94=B0=EB=A5=B8=20?= =?UTF-8?q?Repository=EB=B0=8F=20Service=20=EB=A0=88=EC=9D=B4=EC=96=B4=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20-=20=EC=97=B0=EA=B4=80=EA=B4=80=EA=B3=84?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=EC=97=90=20=EB=94=B0=EB=A5=B8=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../community/board/domain/Board.java | 9 ----- .../board/repository/BoardRepository.java | 1 - .../community/comment/domain/Comment.java | 25 +++--------- .../comment/dto/CommentCreateRequest.java | 4 +- .../comment/dto/PostFindCommentResponse.java | 5 ++- .../comment/service/CommentService.java | 18 ++++----- .../community/post/domain/Post.java | 38 +++++-------------- .../community/post/domain/PostLike.java | 18 ++------- .../community/post/dto/PostCreateRequest.java | 2 +- .../post/repository/PostLikeRepository.java | 6 +-- .../post/repository/PostRepository.java | 4 +- .../post/service/PostCommandService.java | 13 ++----- .../post/service/PostLikeService.java | 13 ++----- .../post/service/PostQueryService.java | 23 +++++++---- .../siteuser/domain/SiteUser.java | 9 ----- .../repository/BoardRepositoryForTest.java | 2 +- .../fixture/CommentFixtureBuilder.java | 6 +-- .../comment/service/CommentServiceTest.java | 6 +-- .../post/fixture/PostFixtureBuilder.java | 2 +- .../post/service/PostLikeServiceTest.java | 4 +- .../post/service/PostQueryServiceTest.java | 4 +- .../PostViewCountConcurrencyTest.java | 2 +- .../siteuser/service/MyPageServiceTest.java | 2 +- 23 files changed, 73 insertions(+), 143 deletions(-) diff --git a/src/main/java/com/example/solidconnection/community/board/domain/Board.java b/src/main/java/com/example/solidconnection/community/board/domain/Board.java index fbf13b44d..4f93e9801 100644 --- a/src/main/java/com/example/solidconnection/community/board/domain/Board.java +++ b/src/main/java/com/example/solidconnection/community/board/domain/Board.java @@ -1,17 +1,11 @@ package com.example.solidconnection.community.board.domain; -import com.example.solidconnection.community.post.domain.Post; -import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; import lombok.Getter; import lombok.NoArgsConstructor; -import java.util.ArrayList; -import java.util.List; - @Entity @Getter @NoArgsConstructor @@ -24,9 +18,6 @@ public class Board { @Column(nullable = false, length = 20) private String koreanName; - @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, orphanRemoval = true) - private List postList = new ArrayList<>(); - public Board(String code, String koreanName) { this.code = code; this.koreanName = koreanName; diff --git a/src/main/java/com/example/solidconnection/community/board/repository/BoardRepository.java b/src/main/java/com/example/solidconnection/community/board/repository/BoardRepository.java index 353a0d8dd..a27c95da6 100644 --- a/src/main/java/com/example/solidconnection/community/board/repository/BoardRepository.java +++ b/src/main/java/com/example/solidconnection/community/board/repository/BoardRepository.java @@ -13,7 +13,6 @@ public interface BoardRepository extends JpaRepository { - @EntityGraph(attributePaths = {"postList"}) Optional findBoardByCode(@Param("code") String code); default Board getByCodeUsingEntityGraph(String code) { diff --git a/src/main/java/com/example/solidconnection/community/comment/domain/Comment.java b/src/main/java/com/example/solidconnection/community/comment/domain/Comment.java index 9bb2dccd9..69379f182 100644 --- a/src/main/java/com/example/solidconnection/community/comment/domain/Comment.java +++ b/src/main/java/com/example/solidconnection/community/comment/domain/Comment.java @@ -45,9 +45,8 @@ public class Comment extends BaseEntity { @JoinColumn(name = "post_id") private Post post; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "site_user_id") - private SiteUser siteUser; + @Column + private long siteUserId; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "parent_id") @@ -60,7 +59,7 @@ public Comment(String content) { this.content = content; } - public void setParentCommentAndPostAndSiteUser(Comment parentComment, Post post, SiteUser siteUser) { + public void setParentCommentAndPostAndSiteUser(Comment parentComment, Post post, long siteUserId) { if (this.parentComment != null) { this.parentComment.getCommentList().remove(this); @@ -74,14 +73,10 @@ public void setParentCommentAndPostAndSiteUser(Comment parentComment, Post post, this.post = post; post.getCommentList().add(this); - if (this.siteUser != null) { - this.siteUser.getCommentList().remove(this); - } - this.siteUser = siteUser; - siteUser.getCommentList().add(this); + this.siteUserId = siteUserId; } - public void setPostAndSiteUser(Post post, SiteUser siteUser) { + public void setPostAndSiteUser(Post post, long siteUserId) { if (this.post != null) { this.post.getCommentList().remove(this); @@ -89,11 +84,7 @@ public void setPostAndSiteUser(Post post, SiteUser siteUser) { this.post = post; post.getCommentList().add(this); - if (this.siteUser != null) { - this.siteUser.getCommentList().remove(this); - } - this.siteUser = siteUser; - siteUser.getCommentList().add(this); + this.siteUserId = siteUserId; } public void resetPostAndSiteUserAndParentComment() { @@ -101,10 +92,6 @@ public void resetPostAndSiteUserAndParentComment() { this.post.getCommentList().remove(this); this.post = null; } - if (this.siteUser != null) { - this.siteUser.getCommentList().remove(this); - this.siteUser = null; - } if (this.parentComment != null) { this.parentComment.getCommentList().remove(this); this.parentComment = null; diff --git a/src/main/java/com/example/solidconnection/community/comment/dto/CommentCreateRequest.java b/src/main/java/com/example/solidconnection/community/comment/dto/CommentCreateRequest.java index 13c512a0c..fe13a3cad 100644 --- a/src/main/java/com/example/solidconnection/community/comment/dto/CommentCreateRequest.java +++ b/src/main/java/com/example/solidconnection/community/comment/dto/CommentCreateRequest.java @@ -24,9 +24,9 @@ public Comment toEntity(SiteUser siteUser, Post post, Comment parentComment) { ); if (parentComment == null) { - comment.setPostAndSiteUser(post, siteUser); + comment.setPostAndSiteUser(post, siteUser.getId()); } else { - comment.setParentCommentAndPostAndSiteUser(parentComment, post, siteUser); + comment.setParentCommentAndPostAndSiteUser(parentComment, post, siteUser.getId()); } return comment; } diff --git a/src/main/java/com/example/solidconnection/community/comment/dto/PostFindCommentResponse.java b/src/main/java/com/example/solidconnection/community/comment/dto/PostFindCommentResponse.java index f1fd78ad0..dcfcdcfa5 100644 --- a/src/main/java/com/example/solidconnection/community/comment/dto/PostFindCommentResponse.java +++ b/src/main/java/com/example/solidconnection/community/comment/dto/PostFindCommentResponse.java @@ -1,6 +1,7 @@ package com.example.solidconnection.community.comment.dto; import com.example.solidconnection.community.comment.domain.Comment; +import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.dto.PostFindSiteUserResponse; import java.time.ZonedDateTime; @@ -15,7 +16,7 @@ public record PostFindCommentResponse( PostFindSiteUserResponse postFindSiteUserResponse ) { - public static PostFindCommentResponse from(Boolean isOwner, Comment comment) { + public static PostFindCommentResponse from(Boolean isOwner, Comment comment, SiteUser siteUser) { return new PostFindCommentResponse( comment.getId(), getParentCommentId(comment), @@ -23,7 +24,7 @@ public static PostFindCommentResponse from(Boolean isOwner, Comment comment) { isOwner, comment.getCreatedAt(), comment.getUpdatedAt(), - PostFindSiteUserResponse.from(comment.getSiteUser()) + PostFindSiteUserResponse.from(siteUser) ); } diff --git a/src/main/java/com/example/solidconnection/community/comment/service/CommentService.java b/src/main/java/com/example/solidconnection/community/comment/service/CommentService.java index 6a2760cf0..7b6176a52 100644 --- a/src/main/java/com/example/solidconnection/community/comment/service/CommentService.java +++ b/src/main/java/com/example/solidconnection/community/comment/service/CommentService.java @@ -18,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; import static com.example.solidconnection.common.exception.ErrorCode.CAN_NOT_UPDATE_DEPRECATED_COMMENT; @@ -35,14 +36,16 @@ public class CommentService { @Transactional(readOnly = true) public List findCommentsByPostId(SiteUser siteUser, Long postId) { + SiteUser commentOwner = siteUserRepository.findById(siteUser.getId()) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); return commentRepository.findCommentTreeByPostId(postId) .stream() - .map(comment -> PostFindCommentResponse.from(isOwner(comment, siteUser), comment)) + .map(comment -> PostFindCommentResponse.from(isOwner(comment, siteUser), comment, siteUser)) .collect(Collectors.toList()); } private Boolean isOwner(Comment comment, SiteUser siteUser) { - return comment.getSiteUser().getId().equals(siteUser.getId()); + return Objects.equals(comment.getSiteUserId(), siteUser.getId()); } @Transactional @@ -54,14 +57,7 @@ public CommentCreateResponse createComment(SiteUser siteUser, CommentCreateReque parentComment = commentRepository.getById(commentCreateRequest.parentId()); validateCommentDepth(parentComment); } - - /* - * todo: siteUser를 영속 상태로 만들 수 있도록 컨트롤러에서 siteUserId 를 넘겨줄 것인지, - * siteUser 에 postList 를 FetchType.EAGER 로 설정할 것인지, - * post 와 siteUser 사이의 양방향을 끊을 것인지 생각해봐야한다. - */ - SiteUser siteUser1 = siteUserRepository.findById(siteUser.getId()).orElseThrow(() -> new CustomException(USER_NOT_FOUND)); - Comment comment = commentCreateRequest.toEntity(siteUser1, post, parentComment); + Comment comment = commentCreateRequest.toEntity(siteUser, post, parentComment); Comment createdComment = commentRepository.save(comment); return CommentCreateResponse.from(createdComment); @@ -122,7 +118,7 @@ public CommentDeleteResponse deleteCommentById(SiteUser siteUser, Long commentId } private void validateOwnership(Comment comment, SiteUser siteUser) { - if (!comment.getSiteUser().getId().equals(siteUser.getId())) { + if (!Objects.equals(comment.getSiteUserId(), siteUser.getId())) { throw new CustomException(INVALID_POST_ACCESS); } } diff --git a/src/main/java/com/example/solidconnection/community/post/domain/Post.java b/src/main/java/com/example/solidconnection/community/post/domain/Post.java index 613abbb4b..1835d16a0 100644 --- a/src/main/java/com/example/solidconnection/community/post/domain/Post.java +++ b/src/main/java/com/example/solidconnection/community/post/domain/Post.java @@ -50,13 +50,12 @@ public class Post extends BaseEntity { @Enumerated(EnumType.STRING) private PostCategory category; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "board_code") - private Board board; + @Column + private String boardCode; + + @Column + private long siteUserId; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "site_user_id") - private SiteUser siteUser; @BatchSize(size = 20) @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true) @@ -66,6 +65,7 @@ public class Post extends BaseEntity { @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true) private List postImageList = new ArrayList<>(); + @BatchSize(size = 5) @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true) private List postLikeList = new ArrayList<>(); @@ -78,29 +78,9 @@ public Post(String title, String content, Boolean isQuestion, Long likeCount, Lo this.category = category; } - public void setBoardAndSiteUser(Board board, SiteUser siteUser) { - if (this.board != null) { - this.board.getPostList().remove(this); - } - this.board = board; - board.getPostList().add(this); - - if (this.siteUser != null) { - this.siteUser.getPostList().remove(this); - } - this.siteUser = siteUser; - siteUser.getPostList().add(this); - } - - public void resetBoardAndSiteUser() { - if (this.board != null) { - this.board.getPostList().remove(this); - this.board = null; - } - if (this.siteUser != null) { - this.siteUser.getPostList().remove(this); - this.siteUser = null; - } + public void setBoardAndSiteUser(String boardCode, long siteUserId) { + this.boardCode = boardCode; + this.siteUserId = siteUserId; } public void update(PostUpdateRequest postUpdateRequest) { diff --git a/src/main/java/com/example/solidconnection/community/post/domain/PostLike.java b/src/main/java/com/example/solidconnection/community/post/domain/PostLike.java index bbe1ff361..d5af504e4 100644 --- a/src/main/java/com/example/solidconnection/community/post/domain/PostLike.java +++ b/src/main/java/com/example/solidconnection/community/post/domain/PostLike.java @@ -26,22 +26,15 @@ public class PostLike { @JoinColumn(name = "post_id") private Post post; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "site_user_id") - private SiteUser siteUser; + private long siteUserId; - public void setPostAndSiteUser(Post post, SiteUser siteUser) { + public void setPostAndSiteUser(Post post, long siteuserId) { if (this.post != null) { this.post.getPostLikeList().remove(this); } this.post = post; post.getPostLikeList().add(this); - - if (this.siteUser != null) { - this.siteUser.getPostLikeList().remove(this); - } - this.siteUser = siteUser; - siteUser.getPostLikeList().add(this); + this.siteUserId = siteuserId; } public void resetPostAndSiteUser() { @@ -49,10 +42,5 @@ public void resetPostAndSiteUser() { this.post.getPostLikeList().remove(this); } this.post = null; - - if (this.siteUser != null) { - this.siteUser.getPostLikeList().remove(this); - } - this.siteUser = null; } } diff --git a/src/main/java/com/example/solidconnection/community/post/dto/PostCreateRequest.java b/src/main/java/com/example/solidconnection/community/post/dto/PostCreateRequest.java index 0cc3afc1f..225f48ca2 100644 --- a/src/main/java/com/example/solidconnection/community/post/dto/PostCreateRequest.java +++ b/src/main/java/com/example/solidconnection/community/post/dto/PostCreateRequest.java @@ -36,7 +36,7 @@ public Post toEntity(SiteUser siteUser, Board board) { 0L, PostCategory.valueOf(this.postCategory) ); - post.setBoardAndSiteUser(board, siteUser); + post.setBoardAndSiteUser(board.getCode(), siteUser.getId()); return post; } } diff --git a/src/main/java/com/example/solidconnection/community/post/repository/PostLikeRepository.java b/src/main/java/com/example/solidconnection/community/post/repository/PostLikeRepository.java index fbc8146cc..0c88eedf8 100644 --- a/src/main/java/com/example/solidconnection/community/post/repository/PostLikeRepository.java +++ b/src/main/java/com/example/solidconnection/community/post/repository/PostLikeRepository.java @@ -12,10 +12,10 @@ public interface PostLikeRepository extends JpaRepository { - Optional findPostLikeByPostAndSiteUser(Post post, SiteUser siteUser); + Optional findPostLikeByPostAndSiteUserId(Post post, long siteUserId); - default PostLike getByPostAndSiteUser(Post post, SiteUser siteUser) { - return findPostLikeByPostAndSiteUser(post, siteUser) + default PostLike getByPostAndSiteUserId(Post post, long siteUserId) { + return findPostLikeByPostAndSiteUserId(post, siteUserId) .orElseThrow(() -> new CustomException(INVALID_POST_LIKE)); } } diff --git a/src/main/java/com/example/solidconnection/community/post/repository/PostRepository.java b/src/main/java/com/example/solidconnection/community/post/repository/PostRepository.java index 2655e520c..95d678f05 100644 --- a/src/main/java/com/example/solidconnection/community/post/repository/PostRepository.java +++ b/src/main/java/com/example/solidconnection/community/post/repository/PostRepository.java @@ -8,13 +8,15 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import java.util.List; import java.util.Optional; import static com.example.solidconnection.common.exception.ErrorCode.INVALID_POST_ID; public interface PostRepository extends JpaRepository { - @EntityGraph(attributePaths = {"postImageList", "board", "siteUser"}) + List findByBoardCode(String boardCode); + @EntityGraph(attributePaths = {"postImageList"}) Optional findPostById(Long id); @Modifying(clearAutomatically = true, flushAutomatically = true) diff --git a/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java b/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java index cb553fd0c..9617f76ec 100644 --- a/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java +++ b/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java @@ -25,6 +25,7 @@ import org.springframework.web.multipart.MultipartFile; import java.util.List; +import java.util.Objects; import static com.example.solidconnection.common.exception.ErrorCode.CAN_NOT_DELETE_OR_UPDATE_QUESTION; import static com.example.solidconnection.common.exception.ErrorCode.CAN_NOT_UPLOAD_MORE_THAN_FIVE_IMAGES; @@ -52,13 +53,8 @@ public PostCreateResponse createPost(SiteUser siteUser, PostCreateRequest postCr // 객체 생성 Board board = boardRepository.getByCode(postCreateRequest.boardCode()); - /* - * todo: siteUser를 영속 상태로 만들 수 있도록 컨트롤러에서 siteUserId 를 넘겨줄 것인지, - * siteUser 에 postList 를 FetchType.EAGER 로 설정할 것인지, - * post 와 siteUser 사이의 양방향을 끊을 것인지 생각해봐야한다. - */ - SiteUser siteUser1 = siteUserRepository.findById(siteUser.getId()).orElseThrow(() -> new CustomException(USER_NOT_FOUND)); - Post post = postCreateRequest.toEntity(siteUser1, board); + Post post = postCreateRequest.toEntity(siteUser, board); + // 이미지 처리 savePostImages(imageFile, post); Post createdPost = postRepository.save(post); @@ -103,7 +99,6 @@ public PostDeleteResponse deletePostById(SiteUser siteUser, Long postId) { validateQuestion(post); removePostImages(post); - post.resetBoardAndSiteUser(); // cache out redisService.deleteKey(redisUtils.getPostViewCountRedisKey(postId)); postRepository.deleteById(post.getId()); @@ -112,7 +107,7 @@ public PostDeleteResponse deletePostById(SiteUser siteUser, Long postId) { } private void validateOwnership(Post post, SiteUser siteUser) { - if (!post.getSiteUser().getId().equals(siteUser.getId())) { + if (!Objects.equals(post.getSiteUserId(), siteUser.getId())) { throw new CustomException(INVALID_POST_ACCESS); } } diff --git a/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java b/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java index e0921e295..f6b61706f 100644 --- a/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java +++ b/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java @@ -30,14 +30,7 @@ public PostLikeResponse likePost(SiteUser siteUser, Long postId) { Post post = postRepository.getById(postId); validateDuplicatePostLike(post, siteUser); PostLike postLike = new PostLike(); - - /* - * todo: siteUser를 영속 상태로 만들 수 있도록 컨트롤러에서 siteUserId 를 넘겨줄 것인지, - * siteUser 에 postList 를 FetchType.EAGER 로 설정할 것인지, - * post 와 siteUser 사이의 양방향을 끊을 것인지 생각해봐야한다. - */ - SiteUser siteUser1 = siteUserRepository.findById(siteUser.getId()).orElseThrow(() -> new CustomException(USER_NOT_FOUND)); - postLike.setPostAndSiteUser(post, siteUser1); + postLike.setPostAndSiteUser(post, siteUser.getId()); postLikeRepository.save(postLike); postRepository.increaseLikeCount(post.getId()); @@ -48,7 +41,7 @@ public PostLikeResponse likePost(SiteUser siteUser, Long postId) { public PostDislikeResponse dislikePost(SiteUser siteUser, Long postId) { Post post = postRepository.getById(postId); - PostLike postLike = postLikeRepository.getByPostAndSiteUser(post, siteUser); + PostLike postLike = postLikeRepository.getByPostAndSiteUserId(post, siteUser.getId()); postLike.resetPostAndSiteUser(); postLikeRepository.deleteById(postLike.getId()); postRepository.decreaseLikeCount(post.getId()); @@ -57,7 +50,7 @@ public PostDislikeResponse dislikePost(SiteUser siteUser, Long postId) { } private void validateDuplicatePostLike(Post post, SiteUser siteUser) { - if (postLikeRepository.findPostLikeByPostAndSiteUser(post, siteUser).isPresent()) { + if (postLikeRepository.findPostLikeByPostAndSiteUserId(post, siteUser.getId()).isPresent()) { throw new CustomException(DUPLICATE_POST_LIKE); } } diff --git a/src/main/java/com/example/solidconnection/community/post/service/PostQueryService.java b/src/main/java/com/example/solidconnection/community/post/service/PostQueryService.java index b8d07b54f..4ac06424b 100644 --- a/src/main/java/com/example/solidconnection/community/post/service/PostQueryService.java +++ b/src/main/java/com/example/solidconnection/community/post/service/PostQueryService.java @@ -16,6 +16,7 @@ import com.example.solidconnection.community.post.repository.PostRepository; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.dto.PostFindSiteUserResponse; +import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.util.RedisUtils; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.EnumUtils; @@ -23,10 +24,12 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; import static com.example.solidconnection.common.exception.ErrorCode.INVALID_BOARD_CODE; import static com.example.solidconnection.common.exception.ErrorCode.INVALID_POST_CATEGORY; +import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND; @Service @RequiredArgsConstructor @@ -35,6 +38,7 @@ public class PostQueryService { private final BoardRepository boardRepository; private final PostRepository postRepository; private final PostLikeRepository postLikeRepository; + private final SiteUserRepository siteUserRepository; private final CommentService commentService; private final RedisService redisService; private final RedisUtils redisUtils; @@ -44,11 +48,10 @@ public List findPostsByCodeAndPostCategory(String code, String String boardCode = validateCode(code); PostCategory postCategory = validatePostCategory(category); + boardRepository.getByCode(boardCode); + List postList = postRepository.findByBoardCode(boardCode); - Board board = boardRepository.getByCodeUsingEntityGraph(boardCode); - List postList = getPostListByPostCategory(board.getPostList(), postCategory); - - return PostListResponse.from(postList); + return PostListResponse.from(getPostListByPostCategory(postList, postCategory)); } @Transactional(readOnly = true) @@ -57,8 +60,12 @@ public PostFindResponse findPostById(SiteUser siteUser, Long postId) { Boolean isOwner = getIsOwner(post, siteUser); Boolean isLiked = getIsLiked(post, siteUser); - PostFindBoardResponse boardPostFindResultDTO = PostFindBoardResponse.from(post.getBoard()); - PostFindSiteUserResponse siteUserPostFindResultDTO = PostFindSiteUserResponse.from(post.getSiteUser()); + Board board = boardRepository.findBoardByCode(post.getBoardCode()) + .orElseThrow(()->new CustomException(INVALID_BOARD_CODE)); + SiteUser postAuthor = siteUserRepository.findById(post.getSiteUserId()) + .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); + PostFindBoardResponse boardPostFindResultDTO = PostFindBoardResponse.from(board); + PostFindSiteUserResponse siteUserPostFindResultDTO = PostFindSiteUserResponse.from(postAuthor); List postImageFindResultDTOList = PostFindPostImageResponse.from(post.getPostImageList()); List commentFindResultDTOList = commentService.findCommentsByPostId(siteUser, postId); @@ -80,11 +87,11 @@ private String validateCode(String code) { } private Boolean getIsOwner(Post post, SiteUser siteUser) { - return post.getSiteUser().getId().equals(siteUser.getId()); + return Objects.equals(post.getSiteUserId(), siteUser.getId()); } private Boolean getIsLiked(Post post, SiteUser siteUser) { - return postLikeRepository.findPostLikeByPostAndSiteUser(post, siteUser) + return postLikeRepository.findPostLikeByPostAndSiteUserId(post, siteUser.getId()) .isPresent(); } 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 596801a97..b91a41b38 100644 --- a/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java +++ b/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java @@ -77,15 +77,6 @@ public class SiteUser { @Column(nullable = true) private String password; - @OneToMany(mappedBy = "siteUser", cascade = CascadeType.ALL, orphanRemoval = true) - private List postList = new ArrayList<>(); - - @OneToMany(mappedBy = "siteUser", cascade = CascadeType.ALL) - private List commentList = new ArrayList<>(); - - @OneToMany(mappedBy = "siteUser", cascade = CascadeType.ALL, orphanRemoval = true) - private List postLikeList = new ArrayList<>(); - public SiteUser( String email, String nickname, diff --git a/src/test/java/com/example/solidconnection/community/board/repository/BoardRepositoryForTest.java b/src/test/java/com/example/solidconnection/community/board/repository/BoardRepositoryForTest.java index 0d94e8d41..ca5265489 100644 --- a/src/test/java/com/example/solidconnection/community/board/repository/BoardRepositoryForTest.java +++ b/src/test/java/com/example/solidconnection/community/board/repository/BoardRepositoryForTest.java @@ -9,6 +9,6 @@ public interface BoardRepositoryForTest extends JpaRepository { - @Query("SELECT b FROM Board b LEFT JOIN FETCH b.postList WHERE b.code = :code") + @Query("SELECT b FROM Board b WHERE b.code = :code") Optional findByCodeWithPosts(@Param("code") String code); } diff --git a/src/test/java/com/example/solidconnection/community/comment/fixture/CommentFixtureBuilder.java b/src/test/java/com/example/solidconnection/community/comment/fixture/CommentFixtureBuilder.java index f5dc10ac2..3a47b1fde 100644 --- a/src/test/java/com/example/solidconnection/community/comment/fixture/CommentFixtureBuilder.java +++ b/src/test/java/com/example/solidconnection/community/comment/fixture/CommentFixtureBuilder.java @@ -40,14 +40,14 @@ public CommentFixtureBuilder parentComment(Comment parentComment) { public Comment createParent() { Comment comment = new Comment(content); - comment.setPostAndSiteUser(post, siteUser); + comment.setPostAndSiteUser(post, siteUser.getId()); return commentRepository.save(comment); } public Comment createChild() { Comment comment = new Comment(content); - comment.setPostAndSiteUser(post, siteUser); - comment.setParentCommentAndPostAndSiteUser(parentComment, post, siteUser); + comment.setPostAndSiteUser(post, siteUser.getId()); + comment.setParentCommentAndPostAndSiteUser(parentComment, post, siteUser.getId()); return commentRepository.save(comment); } } diff --git a/src/test/java/com/example/solidconnection/community/comment/service/CommentServiceTest.java b/src/test/java/com/example/solidconnection/community/comment/service/CommentServiceTest.java index 8e5e5c995..02501d7f1 100644 --- a/src/test/java/com/example/solidconnection/community/comment/service/CommentServiceTest.java +++ b/src/test/java/com/example/solidconnection/community/comment/service/CommentServiceTest.java @@ -128,7 +128,7 @@ class 댓글_생성_테스트 { () -> assertThat(savedComment.getContent()).isEqualTo(request.content()), () -> assertThat(savedComment.getParentComment()).isNull(), () -> assertThat(savedComment.getPost().getId()).isEqualTo(post.getId()), - () -> assertThat(savedComment.getSiteUser().getId()).isEqualTo(user1.getId()) + () -> assertThat(savedComment.getSiteUserId()).isEqualTo(user1.getId()) ); } @@ -148,7 +148,7 @@ class 댓글_생성_테스트 { () -> assertThat(savedComment.getContent()).isEqualTo(request.content()), () -> assertThat(savedComment.getParentComment().getId()).isEqualTo(parentComment.getId()), () -> assertThat(savedComment.getPost().getId()).isEqualTo(post.getId()), - () -> assertThat(savedComment.getSiteUser().getId()).isEqualTo(user2.getId()) + () -> assertThat(savedComment.getSiteUserId()).isEqualTo(user2.getId()) ); } @@ -205,7 +205,7 @@ class 댓글_수정_테스트 { () -> assertThat(updatedComment.getContent()).isEqualTo(request.content()), () -> assertThat(updatedComment.getParentComment()).isNull(), () -> assertThat(updatedComment.getPost().getId()).isEqualTo(post.getId()), - () -> assertThat(updatedComment.getSiteUser().getId()).isEqualTo(user1.getId()) + () -> assertThat(updatedComment.getSiteUserId()).isEqualTo(user1.getId()) ); } diff --git a/src/test/java/com/example/solidconnection/community/post/fixture/PostFixtureBuilder.java b/src/test/java/com/example/solidconnection/community/post/fixture/PostFixtureBuilder.java index ac3440b42..d1ab5f8d0 100644 --- a/src/test/java/com/example/solidconnection/community/post/fixture/PostFixtureBuilder.java +++ b/src/test/java/com/example/solidconnection/community/post/fixture/PostFixtureBuilder.java @@ -71,7 +71,7 @@ public Post create() { likeCount, viewCount, postCategory); - post.setBoardAndSiteUser(board, siteUser); + post.setBoardAndSiteUser(board.getCode(), siteUser.getId()); return postRepository.save(post); } } diff --git a/src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java b/src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java index 9e36edeb9..3f5833006 100644 --- a/src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java +++ b/src/test/java/com/example/solidconnection/community/post/service/PostLikeServiceTest.java @@ -79,7 +79,7 @@ class 게시글_좋아요_테스트 { () -> assertThat(response.likeCount()).isEqualTo(beforeLikeCount + 1), () -> assertThat(response.isLiked()).isTrue(), () -> assertThat(likedPost.getLikeCount()).isEqualTo(beforeLikeCount + 1), - () -> assertThat(postLikeRepository.findPostLikeByPostAndSiteUser(likedPost, user)).isPresent() + () -> assertThat(postLikeRepository.findPostLikeByPostAndSiteUserId(likedPost, user.getId())).isPresent() ); } @@ -117,7 +117,7 @@ class 게시글_좋아요_취소_테스트 { () -> assertThat(response.likeCount()).isEqualTo(beforeLikeCount - 1), () -> assertThat(response.isLiked()).isFalse(), () -> assertThat(unlikedPost.getLikeCount()).isEqualTo(beforeLikeCount - 1), - () -> assertThat(postLikeRepository.findPostLikeByPostAndSiteUser(unlikedPost, user)).isEmpty() + () -> assertThat(postLikeRepository.findPostLikeByPostAndSiteUserId(unlikedPost, user.getId())).isEmpty() ); } diff --git a/src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java b/src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java index dc1e80746..3d198251a 100644 --- a/src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java +++ b/src/test/java/com/example/solidconnection/community/post/service/PostQueryServiceTest.java @@ -93,7 +93,7 @@ void setUp() { List posts = List.of(post1, post2, post3); List expectedPosts = posts.stream() .filter(post -> post.getCategory().equals(PostCategory.자유) - && post.getBoard().getCode().equals(BoardCode.FREE.name())) + && post.getBoardCode().equals(BoardCode.FREE.name())) .toList(); List expectedResponses = PostListResponse.from(expectedPosts); @@ -115,7 +115,7 @@ void setUp() { // given List posts = List.of(post1, post2, post3); List expectedPosts = posts.stream() - .filter(post -> post.getBoard().getCode().equals(BoardCode.FREE.name())) + .filter(post -> post.getBoardCode().equals(BoardCode.FREE.name())) .toList(); List expectedResponses = PostListResponse.from(expectedPosts); diff --git a/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java b/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java index 5f2b70d37..4b6414b7e 100644 --- a/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java @@ -77,7 +77,7 @@ private Post createPost(Board board, SiteUser siteUser) { 0L, PostCategory.valueOf("자유") ); - post.setBoardAndSiteUser(board, siteUser); + post.setBoardAndSiteUser(board.getCode(), siteUser.getId()); return post; } 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 85fdfd4cf..19b3dfe2a 100644 --- a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java +++ b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java @@ -80,13 +80,13 @@ void setUp() { // when MyPageResponse response = myPageService.getMyPageInfo(user); + // then Assertions.assertAll( () -> assertThat(response.nickname()).isEqualTo(user.getNickname()), () -> assertThat(response.profileImageUrl()).isEqualTo(user.getProfileImageUrl()), () -> assertThat(response.role()).isEqualTo(user.getRole()), () -> assertThat(response.email()).isEqualTo(user.getEmail()), - () -> assertThat(response.likedPostCount()).isEqualTo(user.getPostLikeList().size()), () -> assertThat(response.likedUnivApplyInfoCount()).isEqualTo(likedUnivApplyInfoCount) ); } From 805ae3d84ba8356a0c44a717cb71964e344e934a Mon Sep 17 00:00:00 2001 From: Yeonri Date: Wed, 2 Jul 2025 22:26:14 +0900 Subject: [PATCH 08/18] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20import=EB=AC=B8=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../community/board/repository/BoardRepository.java | 1 - .../example/solidconnection/community/post/domain/Post.java | 5 ----- .../solidconnection/community/post/domain/PostLike.java | 1 - .../community/post/repository/PostLikeRepository.java | 1 - .../community/post/service/PostCommandService.java | 1 - .../community/post/service/PostLikeService.java | 1 - 6 files changed, 10 deletions(-) diff --git a/src/main/java/com/example/solidconnection/community/board/repository/BoardRepository.java b/src/main/java/com/example/solidconnection/community/board/repository/BoardRepository.java index a27c95da6..b81f9a15a 100644 --- a/src/main/java/com/example/solidconnection/community/board/repository/BoardRepository.java +++ b/src/main/java/com/example/solidconnection/community/board/repository/BoardRepository.java @@ -3,7 +3,6 @@ import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.common.exception.ErrorCode; import com.example.solidconnection.community.board.domain.Board; -import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.query.Param; diff --git a/src/main/java/com/example/solidconnection/community/post/domain/Post.java b/src/main/java/com/example/solidconnection/community/post/domain/Post.java index 1835d16a0..2f1538b6c 100644 --- a/src/main/java/com/example/solidconnection/community/post/domain/Post.java +++ b/src/main/java/com/example/solidconnection/community/post/domain/Post.java @@ -1,21 +1,16 @@ package com.example.solidconnection.community.post.domain; import com.example.solidconnection.common.BaseEntity; -import com.example.solidconnection.community.board.domain.Board; import com.example.solidconnection.community.comment.domain.Comment; import com.example.solidconnection.community.post.dto.PostUpdateRequest; -import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; 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.JoinColumn; -import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; import lombok.EqualsAndHashCode; import lombok.Getter; diff --git a/src/main/java/com/example/solidconnection/community/post/domain/PostLike.java b/src/main/java/com/example/solidconnection/community/post/domain/PostLike.java index d5af504e4..26ee2c5ae 100644 --- a/src/main/java/com/example/solidconnection/community/post/domain/PostLike.java +++ b/src/main/java/com/example/solidconnection/community/post/domain/PostLike.java @@ -1,6 +1,5 @@ package com.example.solidconnection.community.post.domain; -import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; diff --git a/src/main/java/com/example/solidconnection/community/post/repository/PostLikeRepository.java b/src/main/java/com/example/solidconnection/community/post/repository/PostLikeRepository.java index 0c88eedf8..a3b96e826 100644 --- a/src/main/java/com/example/solidconnection/community/post/repository/PostLikeRepository.java +++ b/src/main/java/com/example/solidconnection/community/post/repository/PostLikeRepository.java @@ -3,7 +3,6 @@ import com.example.solidconnection.common.exception.CustomException; import com.example.solidconnection.community.post.domain.Post; import com.example.solidconnection.community.post.domain.PostLike; -import com.example.solidconnection.siteuser.domain.SiteUser; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; diff --git a/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java b/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java index 9617f76ec..34941107c 100644 --- a/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java +++ b/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java @@ -31,7 +31,6 @@ import static com.example.solidconnection.common.exception.ErrorCode.CAN_NOT_UPLOAD_MORE_THAN_FIVE_IMAGES; import static com.example.solidconnection.common.exception.ErrorCode.INVALID_POST_ACCESS; import static com.example.solidconnection.common.exception.ErrorCode.INVALID_POST_CATEGORY; -import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND; @Service @RequiredArgsConstructor diff --git a/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java b/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java index f6b61706f..787e71187 100644 --- a/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java +++ b/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java @@ -15,7 +15,6 @@ import org.springframework.transaction.annotation.Transactional; import static com.example.solidconnection.common.exception.ErrorCode.DUPLICATE_POST_LIKE; -import static com.example.solidconnection.common.exception.ErrorCode.USER_NOT_FOUND; @Service @RequiredArgsConstructor From 41afcad51a93ee4446df374749d4d0e78f6ea6fd Mon Sep 17 00:00:00 2001 From: Yeonri Date: Fri, 4 Jul 2025 11:36:10 +0900 Subject: [PATCH 09/18] =?UTF-8?q?fix:=20likedPostCount=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=A3=BC=EC=84=9D?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EB=B0=8F=20todo=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/siteuser/service/MyPageServiceTest.java | 2 ++ 1 file changed, 2 insertions(+) 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 19b3dfe2a..677c6a3c4 100644 --- a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java +++ b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java @@ -87,6 +87,8 @@ void setUp() { () -> assertThat(response.profileImageUrl()).isEqualTo(user.getProfileImageUrl()), () -> assertThat(response.role()).isEqualTo(user.getRole()), () -> assertThat(response.email()).isEqualTo(user.getEmail()), + // () -> assertThat(response.likedPostCount()).isEqualTo(user.getLikedPostList().size()), + // todo : 좋아요한 게시물 수 반환 기능 추가와 함께 수정요망 () -> assertThat(response.likedUnivApplyInfoCount()).isEqualTo(likedUnivApplyInfoCount) ); } From f24495e47fddf186cf86a0d97e8d879332889d80 Mon Sep 17 00:00:00 2001 From: Yeonri Date: Tue, 8 Jul 2025 20:39:22 +0900 Subject: [PATCH 10/18] =?UTF-8?q?fix:=20=EC=84=9C=EB=B8=8C=EB=AA=A8?= =?UTF-8?q?=EB=93=88=20=EC=B0=B8=EC=A1=B0=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/secret | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/secret b/src/main/resources/secret index 84002e866..be52e6ce9 160000 --- a/src/main/resources/secret +++ b/src/main/resources/secret @@ -1 +1 @@ -Subproject commit 84002e86670d380219f580c6605fb7c66ed7d977 +Subproject commit be52e6ce9ca3d2c6eb51442108328b00a539510b From 2bb6e95bc22793d2bcd0638f4d671dad195bea24 Mon Sep 17 00:00:00 2001 From: Yeonri Date: Tue, 8 Jul 2025 23:36:00 +0900 Subject: [PATCH 11/18] =?UTF-8?q?refactor:=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EC=88=98=EC=A0=95=EC=82=AC=ED=95=AD=20=EB=B0=98?= =?UTF-8?q?=EC=98=81=20-=20Long=ED=83=80=EC=9E=85=20long=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20-=20collect=20->=20toList=EB=8B=A8?= =?UTF-8?q?=EB=8F=85=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20-=20?= =?UTF-8?q?=EC=BB=A8=EB=B2=A4=EC=85=98=20=EC=88=98=EC=A0=95=20-=20Recommen?= =?UTF-8?q?t=20=EB=B3=80=EA=B2=BD=EC=82=AC=ED=95=AD=20=EC=9B=90=EB=B3=B5?= =?UTF-8?q?=20-=20getGeneralRecommendsExcludingSelected=ED=95=A8=EC=88=98?= =?UTF-8?q?=20OutOfRange=20=EB=B0=A9=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/ApplicationRepository.java | 2 +- .../score/service/ScoreService.java | 2 +- .../university/domain/UnivApplyInfo.java | 4 ++-- .../LikedUnivApplyInfoRepository.java | 2 +- .../repository/UnivApplyInfoRepository.java | 24 +++++++------------ .../GeneralUnivApplyInfoRecommendService.java | 13 ++++++---- .../UnivApplyInfoRecommendService.java | 4 ++-- ...eralUnivApplyInfoRecommendServiceTest.java | 1 + .../UnivApplyInfoRecommendServiceTest.java | 15 ++++++++---- 9 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java b/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java index 9d6fdeba1..7ca45f8b6 100644 --- a/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java +++ b/src/main/java/com/example/solidconnection/application/repository/ApplicationRepository.java @@ -37,7 +37,7 @@ public interface ApplicationRepository extends JpaRepository """) Optional findBySiteUserIdAndTerm(@Param("siteUserId") Long siteUserId, @Param("term") String term); - default Application getApplicationBySiteUserIdAndTerm(Long siteUserId, String 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/score/service/ScoreService.java b/src/main/java/com/example/solidconnection/score/service/ScoreService.java index 818665db0..8b56461e9 100644 --- a/src/main/java/com/example/solidconnection/score/service/ScoreService.java +++ b/src/main/java/com/example/solidconnection/score/service/ScoreService.java @@ -57,7 +57,7 @@ public GpaScoreStatusesResponse getGpaScoreStatus(SiteUser siteUser) { gpaScoreRepository.findBySiteUserId(siteUser.getId()) .stream() .map(GpaScoreStatusResponse::from) - .collect(Collectors.toList()); + .toList(); return GpaScoreStatusesResponse.from(gpaScoreStatusResponseList); } 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 9287f5bd4..26ecacf90 100644 --- a/src/main/java/com/example/solidconnection/university/domain/UnivApplyInfo.java +++ b/src/main/java/com/example/solidconnection/university/domain/UnivApplyInfo.java @@ -77,10 +77,10 @@ public class UnivApplyInfo { @Column(length = 1000) private String details; - @OneToMany(mappedBy = "univApplyInfo", cascade = CascadeType.ALL, orphanRemoval = true) + @OneToMany(mappedBy = "univApplyInfo", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) private Set languageRequirements = new HashSet<>(); - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.EAGER) 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 e5004dd75..fe4f93676 100644 --- a/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java +++ b/src/main/java/com/example/solidconnection/university/repository/LikedUnivApplyInfoRepository.java @@ -25,5 +25,5 @@ public interface LikedUnivApplyInfoRepository extends JpaRepository findUnivApplyInfosBySiteUserId(@Param("siteUserId") long siteUserId); - boolean existsBySiteUserIdAndUnivApplyInfoId(long siteUserId, Long univApplyInfoId); + 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 78dc9108d..b1cff1e87 100644 --- a/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java +++ b/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java @@ -37,22 +37,14 @@ OR r.code IN ( """) List findAllBySiteUsersInterestedCountryOrRegionAndTerm(@Param("siteUserId") Long siteUserId, @Param("term") String term); - @Query(""" - SELECT DISTINCT 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 findAllRandomByTerm(@Param("term") String term); - default List findRandomByTerm(String term, int limitNum) { - return findAllRandomByTerm(term).stream() - .limit(limitNum) - .collect(Collectors.toList()); - } + @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); default UnivApplyInfo getUnivApplyInfoById(Long id) { return findById(id) 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 d45a9634a..1835f4ed0 100644 --- a/src/main/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendService.java +++ b/src/main/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendService.java @@ -2,10 +2,12 @@ import com.example.solidconnection.university.domain.UnivApplyInfo; import com.example.solidconnection.university.repository.UnivApplyInfoRepository; +import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -20,11 +22,14 @@ public class GeneralUnivApplyInfoRecommendService { * */ private final UnivApplyInfoRepository univApplyInfoRepository; + @Getter + private List generalRecommends; + @Value("${university.term}") public String term; - @Transactional(readOnly = true) - public List getGeneralRecommends() { - return univApplyInfoRepository.findRandomByTerm(term, RECOMMEND_UNIV_APPLY_INFO_NUM); + @EventListener(ApplicationReadyEvent.class) + public void init() { + generalRecommends = univApplyInfoRepository.findRandomByTerm(term, RECOMMEND_UNIV_APPLY_INFO_NUM); } } 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 3adec99bc..194c7aff4 100644 --- a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java +++ b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java @@ -56,9 +56,9 @@ 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/test/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendServiceTest.java b/src/test/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendServiceTest.java index 696558783..e2dcdd255 100644 --- a/src/test/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/GeneralUnivApplyInfoRecommendServiceTest.java @@ -40,6 +40,7 @@ void setUp() { univApplyInfoFixture.그라츠공과대학_지원_정보(); univApplyInfoFixture.린츠_카톨릭대학_지원_정보(); univApplyInfoFixture.메이지대학_지원_정보(); + generalUnivApplyInfoRecommendService.init(); } @Test 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 accc29681..96e8bf81d 100644 --- a/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java +++ b/src/test/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendServiceTest.java @@ -72,6 +72,7 @@ void setUp() { univApplyInfoFixture.그라츠공과대학_지원_정보(); univApplyInfoFixture.린츠_카톨릭대학_지원_정보(); univApplyInfoFixture.메이지대학_지원_정보(); + generalUnivApplyInfoRecommendService.init(); } @Test @@ -140,9 +141,10 @@ void setUp() { // then assertThat(response.recommendedUniversities()) .hasSize(RECOMMEND_UNIV_APPLY_INFO_NUM) - .allMatch(univ -> univ.koreanName() != null) - .allMatch(univ -> univ.id() > 0) - .allMatch(univ -> univ.term().equals("2024-1")); + .containsExactlyInAnyOrderElementsOf( + generalUnivApplyInfoRecommendService.getGeneralRecommends().stream() + .map(UnivApplyInfoPreviewResponse::from).toList() + ); } @Test void 일반_추천_대학_지원_정보를_조회한다() { @@ -152,7 +154,10 @@ void setUp() { // then assertThat(response.recommendedUniversities()) .hasSize(RECOMMEND_UNIV_APPLY_INFO_NUM) - .allMatch(univ -> univ.id() > 0) - .allMatch(univ -> univ.koreanName() != null); + .containsExactlyInAnyOrderElementsOf( + generalUnivApplyInfoRecommendService.getGeneralRecommends().stream() + .map(UnivApplyInfoPreviewResponse::from) + .toList() + ); } } From d3c9b0ee1a804a76010a18d2b49f0a2884e129e7 Mon Sep 17 00:00:00 2001 From: Yeonri Date: Wed, 9 Jul 2025 15:14:23 +0900 Subject: [PATCH 12/18] =?UTF-8?q?refactor:=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EC=88=98=EC=A0=95=EC=82=AC=ED=95=AD=20=EB=B0=98?= =?UTF-8?q?=EC=98=81=20-=20UnivApplyInfo=20University=20fetchType=20LAZY?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20-=20=EC=BB=A8=EB=B2=A4?= =?UTF-8?q?=EC=85=98=20=EC=88=98=EC=A0=95=20-=20findRandomByTerm=ED=95=A8?= =?UTF-8?q?=EC=88=98=20nativeQuery=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20Pageabl?= =?UTF-8?q?e=EB=A1=9C=20LIMIT=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../university/domain/UnivApplyInfo.java | 4 ++-- .../repository/UnivApplyInfoRepository.java | 21 +++++++++++-------- .../GeneralUnivApplyInfoRecommendService.java | 5 ++++- .../UnivApplyInfoRecommendService.java | 1 + 4 files changed, 19 insertions(+), 12 deletions(-) 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 26ecacf90..9287f5bd4 100644 --- a/src/main/java/com/example/solidconnection/university/domain/UnivApplyInfo.java +++ b/src/main/java/com/example/solidconnection/university/domain/UnivApplyInfo.java @@ -77,10 +77,10 @@ public class UnivApplyInfo { @Column(length = 1000) private String details; - @OneToMany(mappedBy = "univApplyInfo", cascade = CascadeType.ALL, orphanRemoval = true, 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/UnivApplyInfoRepository.java b/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java index b1cff1e87..c99ac01eb 100644 --- a/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java +++ b/src/main/java/com/example/solidconnection/university/repository/UnivApplyInfoRepository.java @@ -3,13 +3,13 @@ import com.example.solidconnection.common.exception.CustomException; 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; import org.springframework.stereotype.Repository; import java.util.List; -import java.util.stream.Collectors; import static com.example.solidconnection.common.exception.ErrorCode.UNIV_APPLY_INFO_NOT_FOUND; @@ -37,14 +37,17 @@ OR r.code IN ( """) 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) 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/UnivApplyInfoRecommendService.java b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java index 194c7aff4..eaff6eec9 100644 --- a/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java +++ b/src/main/java/com/example/solidconnection/university/service/UnivApplyInfoRecommendService.java @@ -59,6 +59,7 @@ private List getGeneralRecommendsExcludingSelected(List Date: Wed, 9 Jul 2025 23:04:56 +0900 Subject: [PATCH 13/18] =?UTF-8?q?refactor:=20Parameter=20=EB=AA=85?= =?UTF-8?q?=EC=B9=AD=20=EB=B3=80=EA=B2=BD=20-=20siteUser=20->=20siteUserId?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../score/repository/LanguageTestScoreRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 42f249f39..2f4268c06 100644 --- a/src/main/java/com/example/solidconnection/score/repository/LanguageTestScoreRepository.java +++ b/src/main/java/com/example/solidconnection/score/repository/LanguageTestScoreRepository.java @@ -12,7 +12,7 @@ public interface LanguageTestScoreRepository extends JpaRepository findLanguageTestScoreBySiteUserIdAndLanguageTest_LanguageTestType(long siteUserId, LanguageTestType languageTestType); - Optional findLanguageTestScoreBySiteUserIdAndId(long siteUser, Long id); + Optional findLanguageTestScoreBySiteUserIdAndId(long siteUserId, Long id); List findBySiteUserId(long siteUserId); } From 68f4bbdc340926c1d8d46f8f74a6a5348b4d36ab Mon Sep 17 00:00:00 2001 From: Yeonri Date: Wed, 9 Jul 2025 23:28:17 +0900 Subject: [PATCH 14/18] =?UTF-8?q?refactor:=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EC=88=98=EC=A0=95=EC=82=AC=ED=95=AD=20=EB=B0=98?= =?UTF-8?q?=EC=98=81=20-=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=AA=85=20?= =?UTF-8?q?=EA=B0=81=EC=9E=90=20=EA=B8=B0=EB=8A=A5=EC=97=90=20=EB=A7=9E?= =?UTF-8?q?=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/community/comment/domain/Comment.java | 7 +++---- .../community/comment/dto/CommentCreateRequest.java | 4 ++-- .../community/comment/service/CommentService.java | 6 +++--- .../solidconnection/community/post/domain/PostLike.java | 6 +++--- .../community/post/dto/PostCreateRequest.java | 2 +- .../community/post/service/PostLikeService.java | 6 ++---- .../community/board/fixture/BoardFixtureBuilder.java | 2 +- .../community/board/repository/BoardRepositoryForTest.java | 2 +- .../community/comment/fixture/CommentFixtureBuilder.java | 6 +++--- .../community/post/fixture/PostFixtureBuilder.java | 2 +- .../concurrency/PostViewCountConcurrencyTest.java | 2 +- 11 files changed, 21 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/example/solidconnection/community/comment/domain/Comment.java b/src/main/java/com/example/solidconnection/community/comment/domain/Comment.java index 69379f182..90aa1c6ec 100644 --- a/src/main/java/com/example/solidconnection/community/comment/domain/Comment.java +++ b/src/main/java/com/example/solidconnection/community/comment/domain/Comment.java @@ -2,7 +2,6 @@ import com.example.solidconnection.common.BaseEntity; import com.example.solidconnection.community.post.domain.Post; -import com.example.solidconnection.siteuser.domain.SiteUser; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -59,7 +58,7 @@ public Comment(String content) { this.content = content; } - public void setParentCommentAndPostAndSiteUser(Comment parentComment, Post post, long siteUserId) { + public void setParentCommentAndPostAndSiteUserId(Comment parentComment, Post post, long siteUserId) { if (this.parentComment != null) { this.parentComment.getCommentList().remove(this); @@ -76,7 +75,7 @@ public void setParentCommentAndPostAndSiteUser(Comment parentComment, Post post, this.siteUserId = siteUserId; } - public void setPostAndSiteUser(Post post, long siteUserId) { + public void setPostAndSiteUserId(Post post, long siteUserId) { if (this.post != null) { this.post.getCommentList().remove(this); @@ -87,7 +86,7 @@ public void setPostAndSiteUser(Post post, long siteUserId) { this.siteUserId = siteUserId; } - public void resetPostAndSiteUserAndParentComment() { + public void resetPostAndParentComment() { if (this.post != null) { this.post.getCommentList().remove(this); this.post = null; diff --git a/src/main/java/com/example/solidconnection/community/comment/dto/CommentCreateRequest.java b/src/main/java/com/example/solidconnection/community/comment/dto/CommentCreateRequest.java index fe13a3cad..dd25516eb 100644 --- a/src/main/java/com/example/solidconnection/community/comment/dto/CommentCreateRequest.java +++ b/src/main/java/com/example/solidconnection/community/comment/dto/CommentCreateRequest.java @@ -24,9 +24,9 @@ public Comment toEntity(SiteUser siteUser, Post post, Comment parentComment) { ); if (parentComment == null) { - comment.setPostAndSiteUser(post, siteUser.getId()); + comment.setPostAndSiteUserId(post, siteUser.getId()); } else { - comment.setParentCommentAndPostAndSiteUser(parentComment, post, siteUser.getId()); + comment.setParentCommentAndPostAndSiteUserId(parentComment, post, siteUser.getId()); } return comment; } diff --git a/src/main/java/com/example/solidconnection/community/comment/service/CommentService.java b/src/main/java/com/example/solidconnection/community/comment/service/CommentService.java index 7b6176a52..08e458810 100644 --- a/src/main/java/com/example/solidconnection/community/comment/service/CommentService.java +++ b/src/main/java/com/example/solidconnection/community/comment/service/CommentService.java @@ -96,18 +96,18 @@ public CommentDeleteResponse deleteCommentById(SiteUser siteUser, Long commentId // 대댓글인 경우 Comment parentComment = comment.getParentComment(); // 대댓글을 삭제합니다. - comment.resetPostAndSiteUserAndParentComment(); + comment.resetPostAndParentComment(); commentRepository.deleteById(commentId); // 대댓글 삭제 이후, 부모댓글이 무의미하다면 이역시 삭제합니다. if (parentComment.getCommentList().isEmpty() && parentComment.getContent() == null) { - parentComment.resetPostAndSiteUserAndParentComment(); + parentComment.resetPostAndParentComment(); commentRepository.deleteById(parentComment.getId()); } } else { // 댓글인 경우 if (comment.getCommentList().isEmpty()) { // 대댓글이 없는 경우 - comment.resetPostAndSiteUserAndParentComment(); + comment.resetPostAndParentComment(); commentRepository.deleteById(commentId); } else { // 대댓글이 있는 경우 diff --git a/src/main/java/com/example/solidconnection/community/post/domain/PostLike.java b/src/main/java/com/example/solidconnection/community/post/domain/PostLike.java index 26ee2c5ae..6aa75f6a5 100644 --- a/src/main/java/com/example/solidconnection/community/post/domain/PostLike.java +++ b/src/main/java/com/example/solidconnection/community/post/domain/PostLike.java @@ -27,16 +27,16 @@ public class PostLike { private long siteUserId; - public void setPostAndSiteUser(Post post, long siteuserId) { + public void setPostAndSiteUserId(Post post, long siteUserId) { if (this.post != null) { this.post.getPostLikeList().remove(this); } this.post = post; post.getPostLikeList().add(this); - this.siteUserId = siteuserId; + this.siteUserId = siteUserId; } - public void resetPostAndSiteUser() { + public void resetPost() { if (this.post != null) { this.post.getPostLikeList().remove(this); } diff --git a/src/main/java/com/example/solidconnection/community/post/dto/PostCreateRequest.java b/src/main/java/com/example/solidconnection/community/post/dto/PostCreateRequest.java index 225f48ca2..485897510 100644 --- a/src/main/java/com/example/solidconnection/community/post/dto/PostCreateRequest.java +++ b/src/main/java/com/example/solidconnection/community/post/dto/PostCreateRequest.java @@ -36,7 +36,7 @@ public Post toEntity(SiteUser siteUser, Board board) { 0L, PostCategory.valueOf(this.postCategory) ); - post.setBoardAndSiteUser(board.getCode(), siteUser.getId()); + post.setBoardAndSiteUserId(board.getCode(), siteUser.getId()); return post; } } diff --git a/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java b/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java index 787e71187..4ea99ad0f 100644 --- a/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java +++ b/src/main/java/com/example/solidconnection/community/post/service/PostLikeService.java @@ -8,7 +8,6 @@ import com.example.solidconnection.community.post.repository.PostLikeRepository; import com.example.solidconnection.community.post.repository.PostRepository; 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.Isolation; @@ -22,14 +21,13 @@ public class PostLikeService { private final PostRepository postRepository; private final PostLikeRepository postLikeRepository; - private final SiteUserRepository siteUserRepository; @Transactional(isolation = Isolation.READ_COMMITTED) public PostLikeResponse likePost(SiteUser siteUser, Long postId) { Post post = postRepository.getById(postId); validateDuplicatePostLike(post, siteUser); PostLike postLike = new PostLike(); - postLike.setPostAndSiteUser(post, siteUser.getId()); + postLike.setPostAndSiteUserId(post, siteUser.getId()); postLikeRepository.save(postLike); postRepository.increaseLikeCount(post.getId()); @@ -41,7 +39,7 @@ public PostDislikeResponse dislikePost(SiteUser siteUser, Long postId) { Post post = postRepository.getById(postId); PostLike postLike = postLikeRepository.getByPostAndSiteUserId(post, siteUser.getId()); - postLike.resetPostAndSiteUser(); + postLike.resetPost(); postLikeRepository.deleteById(postLike.getId()); postRepository.decreaseLikeCount(post.getId()); diff --git a/src/test/java/com/example/solidconnection/community/board/fixture/BoardFixtureBuilder.java b/src/test/java/com/example/solidconnection/community/board/fixture/BoardFixtureBuilder.java index 1b7eff6ba..0a50b0930 100644 --- a/src/test/java/com/example/solidconnection/community/board/fixture/BoardFixtureBuilder.java +++ b/src/test/java/com/example/solidconnection/community/board/fixture/BoardFixtureBuilder.java @@ -25,7 +25,7 @@ public BoardFixtureBuilder koreanName(String koreanName) { } public Board findOrCreate() { - return boardRepositoryForTest.findByCodeWithPosts(code) + return boardRepositoryForTest.findByCode(code) .orElseGet(() -> boardRepositoryForTest.save(new Board(code, koreanName))); } } diff --git a/src/test/java/com/example/solidconnection/community/board/repository/BoardRepositoryForTest.java b/src/test/java/com/example/solidconnection/community/board/repository/BoardRepositoryForTest.java index ca5265489..bc6470e2c 100644 --- a/src/test/java/com/example/solidconnection/community/board/repository/BoardRepositoryForTest.java +++ b/src/test/java/com/example/solidconnection/community/board/repository/BoardRepositoryForTest.java @@ -10,5 +10,5 @@ public interface BoardRepositoryForTest extends JpaRepository { @Query("SELECT b FROM Board b WHERE b.code = :code") - Optional findByCodeWithPosts(@Param("code") String code); + Optional findByCode(@Param("code") String code); } diff --git a/src/test/java/com/example/solidconnection/community/comment/fixture/CommentFixtureBuilder.java b/src/test/java/com/example/solidconnection/community/comment/fixture/CommentFixtureBuilder.java index 3a47b1fde..02a8ba889 100644 --- a/src/test/java/com/example/solidconnection/community/comment/fixture/CommentFixtureBuilder.java +++ b/src/test/java/com/example/solidconnection/community/comment/fixture/CommentFixtureBuilder.java @@ -40,14 +40,14 @@ public CommentFixtureBuilder parentComment(Comment parentComment) { public Comment createParent() { Comment comment = new Comment(content); - comment.setPostAndSiteUser(post, siteUser.getId()); + comment.setPostAndSiteUserId(post, siteUser.getId()); return commentRepository.save(comment); } public Comment createChild() { Comment comment = new Comment(content); - comment.setPostAndSiteUser(post, siteUser.getId()); - comment.setParentCommentAndPostAndSiteUser(parentComment, post, siteUser.getId()); + comment.setPostAndSiteUserId(post, siteUser.getId()); + comment.setParentCommentAndPostAndSiteUserId(parentComment, post, siteUser.getId()); return commentRepository.save(comment); } } diff --git a/src/test/java/com/example/solidconnection/community/post/fixture/PostFixtureBuilder.java b/src/test/java/com/example/solidconnection/community/post/fixture/PostFixtureBuilder.java index d1ab5f8d0..3473d61e2 100644 --- a/src/test/java/com/example/solidconnection/community/post/fixture/PostFixtureBuilder.java +++ b/src/test/java/com/example/solidconnection/community/post/fixture/PostFixtureBuilder.java @@ -71,7 +71,7 @@ public Post create() { likeCount, viewCount, postCategory); - post.setBoardAndSiteUser(board.getCode(), siteUser.getId()); + post.setBoardAndSiteUserId(board.getCode(), siteUser.getId()); return postRepository.save(post); } } diff --git a/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java b/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java index 4b6414b7e..8f61f0e75 100644 --- a/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java +++ b/src/test/java/com/example/solidconnection/concurrency/PostViewCountConcurrencyTest.java @@ -77,7 +77,7 @@ private Post createPost(Board board, SiteUser siteUser) { 0L, PostCategory.valueOf("자유") ); - post.setBoardAndSiteUser(board.getCode(), siteUser.getId()); + post.setBoardAndSiteUserId(board.getCode(), siteUser.getId()); return post; } From af4ec96fc5cf4448e66ed778b3fb5e79ede2e1d9 Mon Sep 17 00:00:00 2001 From: Yeonri Date: Wed, 9 Jul 2025 23:29:46 +0900 Subject: [PATCH 15/18] =?UTF-8?q?refactor:=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EC=88=98=EC=A0=95=EC=82=AC=ED=95=AD=20=EB=B0=98?= =?UTF-8?q?=EC=98=81=20-=20=EC=82=AC=EC=9A=A9=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8A=94=20import=EB=AC=B8=20=EC=A0=9C=EA=B1=B0=20-?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=BB=A8=EB=B2=A4=EC=85=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20-=20postLikeList=EC=97=90=EC=84=9C=20=EC=9D=98?= =?UTF-8?q?=EB=AF=B8=EC=97=86=EB=8A=94=20BatchSize=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/solidconnection/community/post/domain/Post.java | 3 +-- .../community/post/repository/PostRepository.java | 1 + .../community/post/service/PostCommandService.java | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/example/solidconnection/community/post/domain/Post.java b/src/main/java/com/example/solidconnection/community/post/domain/Post.java index 2f1538b6c..7da358d43 100644 --- a/src/main/java/com/example/solidconnection/community/post/domain/Post.java +++ b/src/main/java/com/example/solidconnection/community/post/domain/Post.java @@ -60,7 +60,6 @@ public class Post extends BaseEntity { @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true) private List postImageList = new ArrayList<>(); - @BatchSize(size = 5) @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true) private List postLikeList = new ArrayList<>(); @@ -73,7 +72,7 @@ public Post(String title, String content, Boolean isQuestion, Long likeCount, Lo this.category = category; } - public void setBoardAndSiteUser(String boardCode, long siteUserId) { + public void setBoardAndSiteUserId(String boardCode, long siteUserId) { this.boardCode = boardCode; this.siteUserId = siteUserId; } diff --git a/src/main/java/com/example/solidconnection/community/post/repository/PostRepository.java b/src/main/java/com/example/solidconnection/community/post/repository/PostRepository.java index 95d678f05..3a6d50d3d 100644 --- a/src/main/java/com/example/solidconnection/community/post/repository/PostRepository.java +++ b/src/main/java/com/example/solidconnection/community/post/repository/PostRepository.java @@ -16,6 +16,7 @@ public interface PostRepository extends JpaRepository { List findByBoardCode(String boardCode); + @EntityGraph(attributePaths = {"postImageList"}) Optional findPostById(Long id); diff --git a/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java b/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java index 34941107c..a76543407 100644 --- a/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java +++ b/src/main/java/com/example/solidconnection/community/post/service/PostCommandService.java @@ -16,7 +16,6 @@ import com.example.solidconnection.s3.dto.UploadedFileUrlResponse; import com.example.solidconnection.s3.service.S3Service; import com.example.solidconnection.siteuser.domain.SiteUser; -import com.example.solidconnection.siteuser.repository.SiteUserRepository; import com.example.solidconnection.util.RedisUtils; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.EnumUtils; @@ -41,7 +40,6 @@ public class PostCommandService { private final S3Service s3Service; private final RedisService redisService; private final RedisUtils redisUtils; - private final SiteUserRepository siteUserRepository; @Transactional public PostCreateResponse createPost(SiteUser siteUser, PostCreateRequest postCreateRequest, From 6fcc903720043b2ba99b2ec18006007baa00156e Mon Sep 17 00:00:00 2001 From: Yeonri Date: Wed, 9 Jul 2025 23:30:36 +0900 Subject: [PATCH 16/18] =?UTF-8?q?fix:=20SiteUser=20=EA=B2=B0=ED=95=A8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20-=20password=20nullable=20true=20->=20fals?= =?UTF-8?q?e=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/siteuser/domain/SiteUser.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) 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 b91a41b38..cb3f43d97 100644 --- a/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java +++ b/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java @@ -1,9 +1,5 @@ package com.example.solidconnection.siteuser.domain; -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 jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -11,7 +7,6 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import jakarta.persistence.UniqueConstraint; import lombok.AccessLevel; @@ -22,8 +17,6 @@ import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -74,7 +67,7 @@ public class SiteUser { @Setter private LocalDate quitedAt; - @Column(nullable = true) + @Column(nullable = false) private String password; public SiteUser( From 5f6bcafb5f8def32996953b4a546efa99c9bbb15 Mon Sep 17 00:00:00 2001 From: Yeonri Date: Thu, 10 Jul 2025 19:28:25 +0900 Subject: [PATCH 17/18] =?UTF-8?q?fix:=20=EC=A7=81=EC=A0=84=20=EC=BB=A4?= =?UTF-8?q?=EB=B0=8B=20revert=20-=20password=20nullable=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EC=82=AC=ED=95=AD=20=EC=B7=A8=EC=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 6fcc903720043b2ba99b2ec18006007baa00156e. --- .../solidconnection/siteuser/domain/SiteUser.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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 cb3f43d97..b91a41b38 100644 --- a/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java +++ b/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java @@ -1,5 +1,9 @@ package com.example.solidconnection.siteuser.domain; +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 jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -7,6 +11,7 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import jakarta.persistence.UniqueConstraint; import lombok.AccessLevel; @@ -17,6 +22,8 @@ import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -67,7 +74,7 @@ public class SiteUser { @Setter private LocalDate quitedAt; - @Column(nullable = false) + @Column(nullable = true) private String password; public SiteUser( From 5b58a39252dfaafb1f8cdf7a446d6b1a5ac4cf55 Mon Sep 17 00:00:00 2001 From: Yeonri Date: Fri, 11 Jul 2025 01:22:25 +0900 Subject: [PATCH 18/18] =?UTF-8?q?refactor:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20import=EB=AC=B8=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/solidconnection/siteuser/domain/SiteUser.java | 7 ------- 1 file changed, 7 deletions(-) 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 b91a41b38..c7d30e7ae 100644 --- a/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java +++ b/src/main/java/com/example/solidconnection/siteuser/domain/SiteUser.java @@ -1,9 +1,5 @@ package com.example.solidconnection.siteuser.domain; -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 jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -11,7 +7,6 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import jakarta.persistence.UniqueConstraint; import lombok.AccessLevel; @@ -22,8 +17,6 @@ import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)