Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
import in.koreatech.koin.domain.shop.dto.ShopResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;

import static io.swagger.v3.oas.annotations.enums.ParameterIn.PATH;

import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,9 @@ public static ShopMenuResponse from(List<MenuCategory> menuCategories) {
}
return new ShopMenuResponse(
count,
menuCategories.stream().map(InnerMenuCategoriesResponse::from).toList(),
menuCategories.stream()
.filter(menuCategory -> menuCategory.getMenuCategoryMaps().size() > 0)
.map(InnerMenuCategoriesResponse::from).toList(),
lastUpdatedDate
);
}
Expand All @@ -54,7 +56,7 @@ private record InnerMenuCategoriesResponse(
String name,

@Schema(description = "해당 상점의 모든 메뉴 리스트")
List<InnerMenuResponse> menuResponses
List<InnerMenuResponse> menus
) {
public static InnerMenuCategoriesResponse from(MenuCategory menuCategory) {
return new InnerMenuCategoriesResponse(
Expand All @@ -66,42 +68,42 @@ public static InnerMenuCategoriesResponse from(MenuCategory menuCategory) {

@JsonNaming(value = SnakeCaseStrategy.class)
private record InnerMenuResponse(
@Schema(example = "저희 식당의 대표 메뉴 탕수육입니다.", description = "설명")
String description,

@Schema(example = "1", description = "고유 id")
Long id,

@Schema(description = "이미지 URL리스트")
List<String> imageUrls,
@Schema(example = "탕수육", description = "이름")
String name,

@Schema(example = "false", description = "숨김 여부")
Boolean isHidden,

@Schema(example = "false", description = "단일 메뉴 여부")
Boolean isSingle,

@Schema(example = "탕수육", description = "이름")
String name,
@Schema(example = "10000", description = "단일 메뉴일때(is_single이 true일때)의 가격")
Integer singlePrice,

@Schema(description = "옵션이 있는 메뉴일때(is_single이 false일때)의 옵션에 따른 가격 리스트")
List<InnerOptionPrice> optionPrices,

@Schema(example = "10000", description = "단일 메뉴일때(is_single이 true일때)의 가격")
Integer singlePrice
@Schema(example = "저희 식당의 대표 메뉴 탕수육입니다.", description = "설명")
String description,

@Schema(description = "이미지 URL리스트")
List<String> imageUrls
) {
public static InnerMenuResponse from(MenuCategoryMap menuCategoryMap) {
Menu menu = menuCategoryMap.getMenu();
boolean isSingle = !menu.hasMultipleOption();
return new InnerMenuResponse(
menu.getDescription(),
menu.getId(),
menu.getMenuImages().stream().map(MenuImage::getImageUrl).toList(),
menu.getName(),
menu.getIsHidden(),
isSingle,
menu.getName(),
isSingle ? menu.getMenuOptions().get(0).getPrice() : null,
isSingle ? null : menu.getMenuOptions().stream().map(InnerOptionPrice::from).toList(),
isSingle ? menu.getMenuOptions().get(0).getPrice() : null
menu.getDescription(),
menu.getMenuImages().stream().map(MenuImage::getImageUrl).toList()
);
}

Expand Down
95 changes: 45 additions & 50 deletions src/test/java/in/koreatech/koin/acceptance/ShopApiTest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package in.koreatech.koin.acceptance;

import static in.koreatech.koin.domain.user.model.UserType.OWNER;
import static org.assertj.core.api.SoftAssertions.assertSoftly;

import java.time.LocalDate;
import java.time.LocalTime;
import java.util.List;
Expand Down Expand Up @@ -33,11 +36,9 @@
import in.koreatech.koin.domain.shop.repository.ShopRepository;
import in.koreatech.koin.domain.user.model.User;
import in.koreatech.koin.domain.user.model.UserGender;
import static in.koreatech.koin.domain.user.model.UserType.OWNER;
import io.restassured.RestAssured;
import io.restassured.response.ExtractableResponse;
import io.restassured.response.Response;
import static org.assertj.core.api.SoftAssertions.assertSoftly;

class ShopApiTest extends AcceptanceTest {

Expand Down Expand Up @@ -255,7 +256,7 @@ void findMenuMultipleOption() {
softly.assertThat(response.body().jsonPath().getBoolean("is_hidden")).isEqualTo(menu.getIsHidden());

softly.assertThat(response.body().jsonPath().getBoolean("is_single")).isFalse();
softly.assertThat((Integer) response.body().jsonPath().get("single_price")).isNull();
softly.assertThat((Integer)response.body().jsonPath().get("single_price")).isNull();

softly.assertThat(response.body().jsonPath().getList("option_prices")).hasSize(2);
softly.assertThat(response.body().jsonPath().getString("option_prices[0].option"))
Expand Down Expand Up @@ -538,6 +539,13 @@ void getShopMenus() {

menuRepository.save(menu3);

MenuCategory menuCategory3 = MenuCategory.builder()
.shopId(1L)
.name("이벤트")
.build();

menuCategoryRepository.save(menuCategory3);

ExtractableResponse<Response> response = RestAssured
.given()
.when()
Expand All @@ -553,35 +561,31 @@ void getShopMenus() {
.isEqualTo(menu1.getMenuCategoryMaps().get(0).getMenuCategory().getId());
softly.assertThat(response.body().jsonPath().getString("menu_categories[0].name"))
.isEqualTo(menu1.getMenuCategoryMaps().get(0).getMenuCategory().getName());
softly.assertThat(
response.body().jsonPath().getString("menu_categories[0].menu_responses[0].description"))
softly.assertThat(response.body().jsonPath().getString("menu_categories[0].menus[0].description"))
.isEqualTo(menu1.getMenuCategoryMaps().get(0).getMenu().getDescription());
softly.assertThat(response.body().jsonPath().getLong("menu_categories[0].menu_responses[0].id"))
softly.assertThat(response.body().jsonPath().getLong("menu_categories[0].menus[0].id"))
.isEqualTo(menu1.getMenuCategoryMaps().get(0).getMenu().getId());
softly.assertThat(response.body().jsonPath().getList("menu_categories[0].menu_responses[0].image_urls"))
softly.assertThat(response.body().jsonPath().getList("menu_categories[0].menus[0].image_urls"))
.hasSize(2);
softly.assertThat(
response.body().jsonPath().getBoolean("menu_categories[0].menu_responses[0].is_hidden"))
softly.assertThat(response.body().jsonPath().getBoolean("menu_categories[0].menus[0].is_hidden"))
.isEqualTo(menu1.getMenuCategoryMaps().get(0).getMenu().getIsHidden());
softly.assertThat(
response.body().jsonPath().getBoolean("menu_categories[0].menu_responses[0].is_single"))
softly.assertThat(response.body().jsonPath().getBoolean("menu_categories[0].menus[0].is_single"))
.isEqualTo(false);
softly.assertThat(response.body().jsonPath().getString("menu_categories[0].menu_responses[0].name"))
softly.assertThat(response.body().jsonPath().getString("menu_categories[0].menus[0].name"))
.isEqualTo(menu1.getMenuCategoryMaps().get(0).getMenu().getName());
softly.assertThat(response.body().jsonPath()
.getString("menu_categories[0].menu_responses[0].option_prices[0].option"))
softly.assertThat(
response.body().jsonPath().getString("menu_categories[0].menus[0].option_prices[0].option"))
.isEqualTo(menu1.getMenuCategoryMaps().get(0).getMenu().getMenuOptions().get(0).getOption());
softly.assertThat(
response.body().jsonPath().getInt("menu_categories[0].menu_responses[0].option_prices[0].price"))
response.body().jsonPath().getInt("menu_categories[0].menus[0].option_prices[0].price"))
.isEqualTo(menu1.getMenuCategoryMaps().get(0).getMenu().getMenuOptions().get(0).getPrice());
softly.assertThat(response.body().jsonPath()
.getString("menu_categories[0].menu_responses[0].option_prices[1].option"))
softly.assertThat(
response.body().jsonPath().getString("menu_categories[0].menus[0].option_prices[1].option"))
.isEqualTo(menu1.getMenuCategoryMaps().get(0).getMenu().getMenuOptions().get(1).getOption());
softly.assertThat(
response.body().jsonPath().getInt("menu_categories[0].menu_responses[0].option_prices[1].price"))
response.body().jsonPath().getInt("menu_categories[0].menus[0].option_prices[1].price"))
.isEqualTo(menu1.getMenuCategoryMaps().get(0).getMenu().getMenuOptions().get(1).getPrice());
softly.assertThat(
(Object) response.body().jsonPath().get("menu_categories[0].menu_responses[0].single_price"))
softly.assertThat((Object)response.body().jsonPath().get("menu_categories[0].menus[0].single_price"))
.isNull();
softly.assertThat(response.body().jsonPath().getString("updated_at"))
.isEqualTo(LocalDate.now().toString());
Expand All @@ -590,59 +594,50 @@ void getShopMenus() {
.isEqualTo(menu2.getMenuCategoryMaps().get(0).getMenuCategory().getId());
softly.assertThat(response.body().jsonPath().getString("menu_categories[1].name"))
.isEqualTo(menu2.getMenuCategoryMaps().get(0).getMenuCategory().getName());
softly.assertThat(
response.body().jsonPath().getString("menu_categories[1].menu_responses[0].description"))
softly.assertThat(response.body().jsonPath().getString("menu_categories[1].menus[0].description"))
.isEqualTo(menu2.getMenuCategoryMaps().get(0).getMenu().getDescription());
softly.assertThat(response.body().jsonPath().getLong("menu_categories[1].menu_responses[0].id"))
softly.assertThat(response.body().jsonPath().getLong("menu_categories[1].menus[0].id"))
.isEqualTo(menu2.getMenuCategoryMaps().get(0).getMenu().getId());
softly.assertThat(response.body().jsonPath().getList("menu_categories[1].menu_responses[0].image_urls"))
softly.assertThat(response.body().jsonPath().getList("menu_categories[1].menus[0].image_urls"))
.hasSize(2);
softly.assertThat(
response.body().jsonPath().getBoolean("menu_categories[1].menu_responses[0].is_hidden"))
softly.assertThat(response.body().jsonPath().getBoolean("menu_categories[1].menus[0].is_hidden"))
.isEqualTo(menu2.getMenuCategoryMaps().get(0).getMenu().getIsHidden());
softly.assertThat(
response.body().jsonPath().getBoolean("menu_categories[1].menu_responses[0].is_single"))
softly.assertThat(response.body().jsonPath().getBoolean("menu_categories[1].menus[0].is_single"))
.isEqualTo(false);
softly.assertThat(response.body().jsonPath().getString("menu_categories[1].menu_responses[0].name"))
softly.assertThat(response.body().jsonPath().getString("menu_categories[1].menus[0].name"))
.isEqualTo(menu2.getMenuCategoryMaps().get(0).getMenu().getName());
softly.assertThat(response.body().jsonPath()
.getString("menu_categories[1].menu_responses[0].option_prices[0].option"))
softly.assertThat(
response.body().jsonPath().getString("menu_categories[1].menus[0].option_prices[0].option"))
.isEqualTo(menu2.getMenuCategoryMaps().get(0).getMenu().getMenuOptions().get(0).getOption());
softly.assertThat(
response.body().jsonPath().getInt("menu_categories[1].menu_responses[0].option_prices[0].price"))
response.body().jsonPath().getInt("menu_categories[1].menus[0].option_prices[0].price"))
.isEqualTo(menu2.getMenuCategoryMaps().get(0).getMenu().getMenuOptions().get(0).getPrice());
softly.assertThat(response.body().jsonPath()
.getString("menu_categories[1].menu_responses[0].option_prices[1].option"))
softly.assertThat(
response.body().jsonPath().getString("menu_categories[1].menus[0].option_prices[1].option"))
.isEqualTo(menu2.getMenuCategoryMaps().get(0).getMenu().getMenuOptions().get(1).getOption());
softly.assertThat(
response.body().jsonPath().getInt("menu_categories[1].menu_responses[0].option_prices[1].price"))
response.body().jsonPath().getInt("menu_categories[1].menus[0].option_prices[1].price"))
.isEqualTo(menu2.getMenuCategoryMaps().get(0).getMenu().getMenuOptions().get(1).getPrice());
softly.assertThat(
(Object) response.body().jsonPath().get("menu_categories[1].menu_responses[0].single_price"))
softly.assertThat((Object)response.body().jsonPath().get("menu_categories[1].menus[0].single_price"))
.isNull();
softly.assertThat(response.body().jsonPath().getString("updated_at"))
.isEqualTo(LocalDate.now().toString());

softly.assertThat(
response.body().jsonPath().getString("menu_categories[1].menu_responses[1].description"))
softly.assertThat(response.body().jsonPath().getString("menu_categories[1].menus[1].description"))
.isEqualTo(menu3.getMenuCategoryMaps().get(0).getMenu().getDescription());
softly.assertThat(response.body().jsonPath().getLong("menu_categories[1].menu_responses[1].id"))
softly.assertThat(response.body().jsonPath().getLong("menu_categories[1].menus[1].id"))
.isEqualTo(menu3.getMenuCategoryMaps().get(0).getMenu().getId());
softly.assertThat(response.body().jsonPath().getList("menu_categories[1].menu_responses[1].image_urls"))
softly.assertThat(response.body().jsonPath().getList("menu_categories[1].menus[1].image_urls"))
.hasSize(2);
softly.assertThat(
response.body().jsonPath().getBoolean("menu_categories[1].menu_responses[1].is_hidden"))
softly.assertThat(response.body().jsonPath().getBoolean("menu_categories[1].menus[1].is_hidden"))
.isEqualTo(menu3.getMenuCategoryMaps().get(0).getMenu().getIsHidden());
softly.assertThat(
response.body().jsonPath().getBoolean("menu_categories[1].menu_responses[1].is_single"))
softly.assertThat(response.body().jsonPath().getBoolean("menu_categories[1].menus[1].is_single"))
.isEqualTo(true);
softly.assertThat(response.body().jsonPath().getString("menu_categories[1].menu_responses[1].name"))
softly.assertThat(response.body().jsonPath().getString("menu_categories[1].menus[1].name"))
.isEqualTo(menu3.getMenuCategoryMaps().get(0).getMenu().getName());
softly.assertThat(
response.body().jsonPath().getString("menu_categories[1].menu_responses[1].option_prices"))
softly.assertThat(response.body().jsonPath().getString("menu_categories[1].menus[1].option_prices"))
.isEqualTo(null);
softly.assertThat(
response.body().jsonPath().getInt("menu_categories[1].menu_responses[1].single_price"))
softly.assertThat(response.body().jsonPath().getInt("menu_categories[1].menus[1].single_price"))
.isEqualTo(menu3.getMenuCategoryMaps().get(0).getMenu().getMenuOptions().get(0).getPrice());
softly.assertThat(response.body().jsonPath().getString("updated_at"))
.isEqualTo(LocalDate.now().toString());
Expand Down