From 6e306571ddcdf2c136e7f1a39a8b64139d58949e Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Wed, 4 Feb 2026 23:02:27 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20host=5Funiversity=20=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EB=B8=94=EC=9D=98=20korean=5Fname=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=EC=97=90=20unique=20key=20=EC=BF=A0=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solidconnection/university/domain/HostUniversity.java | 2 +- ...44__add_unique_constraint_to_host_university_korean_name.sql | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/db/migration/V44__add_unique_constraint_to_host_university_korean_name.sql diff --git a/src/main/java/com/example/solidconnection/university/domain/HostUniversity.java b/src/main/java/com/example/solidconnection/university/domain/HostUniversity.java index 3d817b45..fe5059c9 100644 --- a/src/main/java/com/example/solidconnection/university/domain/HostUniversity.java +++ b/src/main/java/com/example/solidconnection/university/domain/HostUniversity.java @@ -24,7 +24,7 @@ public class HostUniversity extends BaseEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(nullable = false, length = 100) + @Column(nullable = false, unique = true, length = 100) private String koreanName; @Column(nullable = false, length = 100) diff --git a/src/main/resources/db/migration/V44__add_unique_constraint_to_host_university_korean_name.sql b/src/main/resources/db/migration/V44__add_unique_constraint_to_host_university_korean_name.sql new file mode 100644 index 00000000..636aa28a --- /dev/null +++ b/src/main/resources/db/migration/V44__add_unique_constraint_to_host_university_korean_name.sql @@ -0,0 +1,2 @@ +ALTER TABLE host_university + ADD CONSTRAINT uk_host_university_korean_name UNIQUE (korean_name); From f9ca8b1acede25aa151d16af727f5062db64a7d9 Mon Sep 17 00:00:00 2001 From: seonghyeok Date: Fri, 6 Feb 2026 22:41:25 +0900 Subject: [PATCH 2/2] =?UTF-8?q?test:=20test=EC=9A=A9=20hostUniversityRepos?= =?UTF-8?q?itory=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../university/fixture/UniversityFixture.java | 20 +++++++++---------- .../fixture/UniversityFixtureBuilder.java | 13 ++++++++---- .../HostUniversityRepositoryForTest.java | 10 ++++++++++ 3 files changed, 29 insertions(+), 14 deletions(-) create mode 100644 src/test/java/com/example/solidconnection/university/repository/HostUniversityRepositoryForTest.java diff --git a/src/test/java/com/example/solidconnection/university/fixture/UniversityFixture.java b/src/test/java/com/example/solidconnection/university/fixture/UniversityFixture.java index 553966c1..edf262d6 100644 --- a/src/test/java/com/example/solidconnection/university/fixture/UniversityFixture.java +++ b/src/test/java/com/example/solidconnection/university/fixture/UniversityFixture.java @@ -20,7 +20,7 @@ public final class UniversityFixture { .englishName("University of Guam") .country(countryFixture.미국()) .region(regionFixture.영미권()) - .create(); + .findOrCreate(); } public HostUniversity 네바다주립_대학_라스베이거스() { @@ -29,7 +29,7 @@ public final class UniversityFixture { .englishName("University of Nevada, Las Vegas") .country(countryFixture.미국()) .region(regionFixture.영미권()) - .create(); + .findOrCreate(); } public HostUniversity 아칸소_주립_대학() { @@ -38,7 +38,7 @@ public final class UniversityFixture { .englishName("Arkansas State University") .country(countryFixture.미국()) .region(regionFixture.영미권()) - .create(); + .findOrCreate(); } public HostUniversity 메모리얼_대학_세인트존스() { @@ -47,7 +47,7 @@ public final class UniversityFixture { .englishName("Memorial University of Newfoundland St. John's") .country(countryFixture.캐나다()) .region(regionFixture.영미권()) - .create(); + .findOrCreate(); } public HostUniversity 서던덴마크_대학() { @@ -56,7 +56,7 @@ public final class UniversityFixture { .englishName("University of Southern Denmark") .country(countryFixture.덴마크()) .region(regionFixture.유럽()) - .create(); + .findOrCreate(); } public HostUniversity 코펜하겐IT_대학() { @@ -65,7 +65,7 @@ public final class UniversityFixture { .englishName("IT University of Copenhagen") .country(countryFixture.덴마크()) .region(regionFixture.유럽()) - .create(); + .findOrCreate(); } public HostUniversity 그라츠_대학() { @@ -74,7 +74,7 @@ public final class UniversityFixture { .englishName("University of Graz") .country(countryFixture.오스트리아()) .region(regionFixture.유럽()) - .create(); + .findOrCreate(); } public HostUniversity 그라츠공과_대학() { @@ -83,7 +83,7 @@ public final class UniversityFixture { .englishName("Graz University of Technology") .country(countryFixture.오스트리아()) .region(regionFixture.유럽()) - .create(); + .findOrCreate(); } public HostUniversity 린츠_카톨릭_대학() { @@ -92,7 +92,7 @@ public final class UniversityFixture { .englishName("Catholic Private University Linz") .country(countryFixture.오스트리아()) .region(regionFixture.유럽()) - .create(); + .findOrCreate(); } public HostUniversity 메이지_대학() { @@ -101,6 +101,6 @@ public final class UniversityFixture { .englishName("Meiji University") .country(countryFixture.일본()) .region(regionFixture.아시아()) - .create(); + .findOrCreate(); } } diff --git a/src/test/java/com/example/solidconnection/university/fixture/UniversityFixtureBuilder.java b/src/test/java/com/example/solidconnection/university/fixture/UniversityFixtureBuilder.java index a656bfe2..dce89490 100644 --- a/src/test/java/com/example/solidconnection/university/fixture/UniversityFixtureBuilder.java +++ b/src/test/java/com/example/solidconnection/university/fixture/UniversityFixtureBuilder.java @@ -3,7 +3,7 @@ import com.example.solidconnection.location.country.domain.Country; import com.example.solidconnection.location.region.domain.Region; import com.example.solidconnection.university.domain.HostUniversity; -import com.example.solidconnection.university.repository.HostUniversityRepository; +import com.example.solidconnection.university.repository.HostUniversityRepositoryForTest; import lombok.RequiredArgsConstructor; import org.springframework.boot.test.context.TestComponent; @@ -11,7 +11,7 @@ @RequiredArgsConstructor public class UniversityFixtureBuilder { - private final HostUniversityRepository hostUniversityRepository; + private final HostUniversityRepositoryForTest hostUniversityRepositoryForTest; private String koreanName; private String englishName; @@ -19,7 +19,7 @@ public class UniversityFixtureBuilder { private Region region; public UniversityFixtureBuilder university() { - return new UniversityFixtureBuilder(hostUniversityRepository); + return new UniversityFixtureBuilder(hostUniversityRepositoryForTest); } public UniversityFixtureBuilder koreanName(String koreanName) { @@ -53,6 +53,11 @@ public HostUniversity create() { "https://background-image-url", null, country, region ); - return hostUniversityRepository.save(university); + return hostUniversityRepositoryForTest.save(university); + } + + public HostUniversity findOrCreate() { + return hostUniversityRepositoryForTest.findByKoreanName(koreanName) + .orElseGet(this::create); } } diff --git a/src/test/java/com/example/solidconnection/university/repository/HostUniversityRepositoryForTest.java b/src/test/java/com/example/solidconnection/university/repository/HostUniversityRepositoryForTest.java new file mode 100644 index 00000000..7fe289c8 --- /dev/null +++ b/src/test/java/com/example/solidconnection/university/repository/HostUniversityRepositoryForTest.java @@ -0,0 +1,10 @@ +package com.example.solidconnection.university.repository; + +import com.example.solidconnection.university.domain.HostUniversity; +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface HostUniversityRepositoryForTest extends JpaRepository { + + Optional findByKoreanName(String koreanName); +}