From ae71fa34b99bdee2b97005854e4a760f1edd50c5 Mon Sep 17 00:00:00 2001 From: odo27 <84677292+odo27@users.noreply.github.com> Date: Tue, 18 Jul 2023 18:09:19 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9D=8C=EC=8B=9D=EC=A0=90=20=EC=A0=84?= =?UTF-8?q?=EC=B2=B4=20=EC=A1=B0=ED=9A=8C=20api=20=EA=B5=AC=ED=98=84=20(#1?= =?UTF-8?q?35)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 음식점 전체 조회 서비스 구현 (#133) * refactor: fixture 분리 (#133) * feat: 음식점 전체 조회 API 구현 (#133) * test: 인수테스트 공통화 (#133) * style: polishing (#133) * style: polishing (#133) --------- Co-authored-by: TaeyeonRoyce Co-authored-by: shin-mallang Co-authored-by: kdkdhoho --- backend/build.gradle | 38 ++--- .../com/celuveat/CeluveatApplication.java | 6 +- .../application/RestaurantQueryService.java | 62 ++++++++ .../application/dto/CelebQueryResponse.java | 20 +++ .../dto/RestaurantImageQueryResponse.java | 20 +++ .../dto/RestaurantQueryResponse.java | 39 +++++ .../restaurant/domain/RestaurantImage.java | 6 +- .../presentation/RestaurantController.java | 23 +++ .../celuveat/CeluveatApplicationTests.java | 6 +- .../acceptance/common/AcceptanceSteps.java | 50 ++++++ .../acceptance/common/AcceptanceTest.java | 22 +++ .../restaurant/RestaurantAcceptanceSteps.java | 27 ++++ .../restaurant/RestaurantAcceptanceTest.java | 29 ++++ .../celuveat/celeb/fixture/CelebFixture.java | 14 ++ .../java/com/celuveat/common/SeedData.java | 142 ++++++++++++++++++ .../RestaurantQueryServiceTest.java | 40 +++++ .../restaurant/fixture/RestaurantFixture.java | 18 +++ .../fixture/RestaurantImageFixture.java | 17 +++ .../celuveat/video/fixture/VideoFixture.java | 18 +++ backend/src/test/resources/application.yml | 28 ++++ 20 files changed, 597 insertions(+), 28 deletions(-) create mode 100644 backend/src/main/java/com/celuveat/restaurant/application/RestaurantQueryService.java create mode 100644 backend/src/main/java/com/celuveat/restaurant/application/dto/CelebQueryResponse.java create mode 100644 backend/src/main/java/com/celuveat/restaurant/application/dto/RestaurantImageQueryResponse.java create mode 100644 backend/src/main/java/com/celuveat/restaurant/application/dto/RestaurantQueryResponse.java create mode 100644 backend/src/main/java/com/celuveat/restaurant/presentation/RestaurantController.java create mode 100644 backend/src/test/java/com/celuveat/acceptance/common/AcceptanceSteps.java create mode 100644 backend/src/test/java/com/celuveat/acceptance/common/AcceptanceTest.java create mode 100644 backend/src/test/java/com/celuveat/acceptance/restaurant/RestaurantAcceptanceSteps.java create mode 100644 backend/src/test/java/com/celuveat/acceptance/restaurant/RestaurantAcceptanceTest.java create mode 100644 backend/src/test/java/com/celuveat/celeb/fixture/CelebFixture.java create mode 100644 backend/src/test/java/com/celuveat/common/SeedData.java create mode 100644 backend/src/test/java/com/celuveat/restaurant/application/RestaurantQueryServiceTest.java create mode 100644 backend/src/test/java/com/celuveat/restaurant/fixture/RestaurantFixture.java create mode 100644 backend/src/test/java/com/celuveat/restaurant/fixture/RestaurantImageFixture.java create mode 100644 backend/src/test/java/com/celuveat/video/fixture/VideoFixture.java diff --git a/backend/build.gradle b/backend/build.gradle index a026c0610..730c35c0c 100644 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -1,38 +1,40 @@ plugins { - id 'java' - id 'org.springframework.boot' version '3.1.1' - id 'io.spring.dependency-management' version '1.1.0' + id 'java' + id 'org.springframework.boot' version '3.1.1' + id 'io.spring.dependency-management' version '1.1.0' } group = 'com.celuveat' version = '0.0.1-SNAPSHOT' java { - sourceCompatibility = '17' + sourceCompatibility = '17' } configurations { - compileOnly { - extendsFrom annotationProcessor - } + compileOnly { + extendsFrom annotationProcessor + } } repositories { - mavenCentral() + mavenCentral() } dependencies { - implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - implementation 'org.springframework.boot:spring-boot-starter-validation' - implementation 'org.springframework.boot:spring-boot-starter-web' - compileOnly 'org.projectlombok:lombok' - runtimeOnly 'com.h2database:h2' - runtimeOnly 'com.mysql:mysql-connector-j' - annotationProcessor 'org.projectlombok:lombok' - testImplementation 'org.springframework.boot:spring-boot-starter-test' - testImplementation 'io.rest-assured:rest-assured:5.3.0' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.springframework.boot:spring-boot-starter-web' + compileOnly 'org.projectlombok:lombok' + runtimeOnly 'com.h2database:h2' + runtimeOnly 'com.mysql:mysql-connector-j' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation 'io.rest-assured:rest-assured:5.3.0' + testCompileOnly 'org.projectlombok:lombok' + testAnnotationProcessor 'org.projectlombok:lombok' } tasks.named('test') { - useJUnitPlatform() + useJUnitPlatform() } diff --git a/backend/src/main/java/com/celuveat/CeluveatApplication.java b/backend/src/main/java/com/celuveat/CeluveatApplication.java index 183f1592e..63e448168 100644 --- a/backend/src/main/java/com/celuveat/CeluveatApplication.java +++ b/backend/src/main/java/com/celuveat/CeluveatApplication.java @@ -6,8 +6,8 @@ @SpringBootApplication public class CeluveatApplication { - public static void main(String[] args) { - SpringApplication.run(CeluveatApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(CeluveatApplication.class, args); + } } diff --git a/backend/src/main/java/com/celuveat/restaurant/application/RestaurantQueryService.java b/backend/src/main/java/com/celuveat/restaurant/application/RestaurantQueryService.java new file mode 100644 index 000000000..a8ae8c718 --- /dev/null +++ b/backend/src/main/java/com/celuveat/restaurant/application/RestaurantQueryService.java @@ -0,0 +1,62 @@ +package com.celuveat.restaurant.application; + +import static java.util.stream.Collectors.groupingBy; + +import com.celuveat.celeb.domain.Celeb; +import com.celuveat.restaurant.application.dto.RestaurantQueryResponse; +import com.celuveat.restaurant.domain.Restaurant; +import com.celuveat.restaurant.domain.RestaurantImage; +import com.celuveat.restaurant.domain.RestaurantImageRepository; +import com.celuveat.video.domain.Video; +import com.celuveat.video.domain.VideoRepository; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class RestaurantQueryService { + + private final RestaurantImageRepository restaurantImageRepository; + private final VideoRepository videoRepository; + + public List findAll() { + Map> celebs = restaurantCelebsMap(); + Map> images = restaurantImagesMap(); + return images.keySet().stream() + .map(restaurant -> mapToRestaurantQueryResponse(celebs, images, restaurant)) + .toList(); + } + + private Map> restaurantCelebsMap() { + List