Skip to content

Commit

Permalink
[#42] Refactor: 고정메뉴 조회 구조 변경
Browse files Browse the repository at this point in the history
- 한식, 일식, 양식 등의 메뉴 카테고리 반영
  • Loading branch information
SY2on committed Jan 20, 2024
1 parent a81460f commit c146cb8
Show file tree
Hide file tree
Showing 9 changed files with 106 additions and 35 deletions.
14 changes: 0 additions & 14 deletions src/main/java/ssu/eatssu/domain/admin/dto/FixMenuBoard.java

This file was deleted.

14 changes: 14 additions & 0 deletions src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ssu.eatssu.domain.admin.dto;

import java.util.ArrayList;
import java.util.List;

public record MenuBoard(String restaurantName, List<MenuSection> menuSections) {
public MenuBoard(String restaurantName) {
this(restaurantName, new ArrayList<>());
}

public void addMenuSection(MenuSection menuSection) {
menuSections.add(menuSection);
}
}
5 changes: 3 additions & 2 deletions src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@
import java.util.ArrayList;
import java.util.List;

public record MenuBoards(List<RestaurantMenuBoard> menuBoards) {
public record MenuBoards(List<MenuBoard> menuBoards) {
public MenuBoards() {
this(new ArrayList<>());
}
public void add(RestaurantMenuBoard menuBoard) {

public void add(MenuBoard menuBoard) {
menuBoards.add(menuBoard);
}
}
14 changes: 14 additions & 0 deletions src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ssu.eatssu.domain.admin.dto;

import java.util.ArrayList;
import java.util.List;

public record MenuSection(String title, List<MenuLine> menuLines) {
public MenuSection(String title) {
this(title, new ArrayList<>());
}

public void addMenuLine(MenuLine menuLine) {
menuLines.add(menuLine);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import ssu.eatssu.domain.admin.dto.BriefMenu;
import ssu.eatssu.domain.menu.entity.MenuCategory;
import ssu.eatssu.domain.menu.entity.QMenu;
import ssu.eatssu.domain.menu.entity.QMenuCategory;
import ssu.eatssu.domain.restaurant.entity.QRestaurant;
import ssu.eatssu.domain.restaurant.entity.RestaurantName;

Expand All @@ -18,17 +20,18 @@ public class LoadFixMenuRepository {
private final JPAQueryFactory queryFactory;
private final QMenu menu = QMenu.menu;
private final QRestaurant restaurant = QRestaurant.restaurant;
private final QMenuCategory category = QMenuCategory.menuCategory;

public List<BriefMenu> findBriefMenusByRestaurantName(RestaurantName restaurantName) {
public List<BriefMenu> findBriefMenusByCategoryId(Long categoryId) {
return queryFactory
.select(Projections.constructor(BriefMenu.class,
menu.id,
menu.name,
menu.price))
.from(menu)
.join(menu.restaurant, restaurant)
.join(menu.category, category)
.where(
restaurantNameEq(restaurantName)
menuCategoryIdEq(categoryId)
)
.orderBy(menu.name.asc())
.fetch();
Expand Down Expand Up @@ -71,16 +74,31 @@ public long getRestaurantId(Long menuId) {
.fetchFirst();
}

private BooleanExpression menuNameEq(String name) {
return menu.name.eq(name);
public List<MenuCategory> findMenuCategoriesByRestaurant(RestaurantName restaurant) {
return queryFactory
.selectFrom(category)
.where(
categoryRestaurantNameEq(restaurant)
).fetch();
}

private BooleanExpression restaurantNameEq(RestaurantName name) {
return restaurant.restaurantName.eq(name);
private BooleanExpression menuNameEq(String MenuName) {
return menu.name.eq(MenuName);
}

private BooleanExpression restaurantNameEq(RestaurantName restaurantName) {
return restaurant.restaurantName.eq(restaurantName);
}

private BooleanExpression restaurantIdEq(Long restaurantId) {
return restaurant.id.eq(restaurantId);
}

private BooleanExpression categoryRestaurantNameEq(RestaurantName restaurantName) {
return category.restaurantName.eq(restaurantName);
}

private BooleanExpression menuCategoryIdEq(Long categoryId) {
return category.id.eq(categoryId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import ssu.eatssu.domain.admin.persistence.LoadFixMenuRepository;
import ssu.eatssu.domain.admin.persistence.ManageMenuRepository;
import ssu.eatssu.domain.menu.entity.Menu;
import ssu.eatssu.domain.menu.entity.MenuCategory;
import ssu.eatssu.domain.restaurant.entity.Restaurant;
import ssu.eatssu.domain.restaurant.entity.RestaurantName;
import ssu.eatssu.domain.restaurant.entity.RestaurantType;
Expand All @@ -31,26 +32,40 @@ public MenuBoards getMenuBoards() {
MenuBoards menuBoards = new MenuBoards();

RestaurantType.FIXED.getRestaurants()
.forEach(restaurant -> menuBoards.add(getRestaurantMenuBoard(restaurant)));
.forEach(restaurant -> menuBoards.add(getMenuBoard(restaurant)));

return menuBoards;
}

private RestaurantMenuBoard getRestaurantMenuBoard(RestaurantName restaurant) {
FixMenuBoard menuBoard = new FixMenuBoard(restaurant.getDescription());
private MenuBoard getMenuBoard(RestaurantName restaurant) {
MenuBoard menuBoard = new MenuBoard(restaurant.getDescription());

List<BriefMenu> briefMenus = loadMenuRepository.findBriefMenusByRestaurantName(restaurant);
getMenuSections(restaurant).forEach(menuBoard::addMenuSection);

return menuBoard;
}

private List<MenuSection> getMenuSections(RestaurantName restaurant) {
List<MenuCategory> menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant);
return menuCategories.stream()
.map(this::getMenuSection)
.toList();
}

private MenuSection getMenuSection(MenuCategory category) {
MenuSection menuSection = new MenuSection(category.getName());

List<BriefMenu> briefMenus = loadMenuRepository.findBriefMenusByCategoryId(category.getId());

briefMenus.forEach(briefMenu ->
menuBoard.addMenu(new MenuLine(
menuSection.addMenuLine(new MenuLine(
briefMenu.id(),
briefMenu.name(),
briefMenu.price(),
fixMenuRatingRepository.getMainRatingAverage(briefMenu.id())
))
);

return menuBoard;
return menuSection;
}

public void register(RestaurantName restaurantName, RegisterFixMenuRequest request) {
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/ssu/eatssu/domain/menu/entity/Menu.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ public class Menu {
@Embedded
private Reviews reviews = new Reviews();

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "menu_category_id")
private MenuCategory category;

private Menu(String name, Restaurant restaurant, Integer price) {
this.name = name;
this.restaurant = restaurant;
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package ssu.eatssu.domain.menu.entity;

import jakarta.persistence.*;
import lombok.*;
import ssu.eatssu.domain.restaurant.entity.RestaurantName;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class MenuCategory {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "menu_category_id")
private Long id;

private String name;

@Enumerated(EnumType.STRING)
private RestaurantName restaurantName;

}

0 comments on commit c146cb8

Please sign in to comment.