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 3d817b45f..fe5059c91 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 000000000..636aa28a6 --- /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); 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 553966c10..edf262d67 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 a656bfe2d..dce894900 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 000000000..7fe289c8c --- /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); +}