Skip to content

Commit

Permalink
[#42] Feat: 고정 메뉴 추가 기능 개발
Browse files Browse the repository at this point in the history
  • Loading branch information
SY2on committed Jan 20, 2024
1 parent 736ada2 commit 84a9d2b
Show file tree
Hide file tree
Showing 7 changed files with 144 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.*;
import ssu.eatssu.domain.admin.dto.MenuBoards;
import ssu.eatssu.domain.admin.dto.RegisterMenuRequest;
import ssu.eatssu.domain.admin.service.ManageFixMenuService;
import ssu.eatssu.domain.restaurant.entity.RestaurantName;
import ssu.eatssu.global.handler.response.BaseResponse;

@Controller
@RequestMapping("/admin/menu/fix-menu")
Expand All @@ -14,10 +17,21 @@ public class ManageFixMenuController {

private final ManageFixMenuService manageFixMenuService;

@ResponseBody
@GetMapping("")
public String fixMenuPage(Model model) {
model.addAttribute("menuBoards", manageFixMenuService.getMenuBoards());
return "fix-menu";
public BaseResponse<MenuBoards> fixMenuPage(Model model) {
MenuBoards menuBoards = manageFixMenuService.getMenuBoards();
//model.addAttribute("menuBoards", manageFixMenuService.getMenuBoards());
return BaseResponse.success(menuBoards);
}

//TODO ResponseBody 해제
@ResponseBody
@PostMapping("")
public String registerFixMenu(@RequestParam RestaurantName restaurantName,
@RequestBody RegisterMenuRequest request) {
manageFixMenuService.registerFixMenu(restaurantName, request);
return "redirect:/admin/menu/fix-menu";
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ssu.eatssu.domain.admin.dto;

public record RegisterMenuRequest(String menuName) {
public record RegisterMenuRequest(String name, Integer price) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package ssu.eatssu.domain.admin.persistence;

import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import ssu.eatssu.domain.restaurant.entity.QRestaurant;
import ssu.eatssu.domain.restaurant.entity.Restaurant;
import ssu.eatssu.domain.restaurant.entity.RestaurantName;

@Repository
@RequiredArgsConstructor
public class FindRestaurantRepository {
private final JPAQueryFactory queryFactory;
private final QRestaurant restaurant = QRestaurant.restaurant;

public Restaurant findByRestaurantName(RestaurantName name) {
return queryFactory
.selectFrom(restaurant)
.where(
restaurantNameEq(name)
)
.fetchOne();
}

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

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

@Repository
@RequiredArgsConstructor
public class ManageFixMenuRepository {
public class LoadFixMenuRepository {
private final JPAQueryFactory queryFactory;
private final QMenu menu = QMenu.menu;
private final QRestaurant restaurant = QRestaurant.restaurant;
Expand All @@ -34,6 +34,22 @@ public List<BriefMenu> findBriefMenusByRestaurantName(RestaurantName restaurantN
.fetch();
}

public boolean existsMenu(String name, RestaurantName restaurantName) {
return queryFactory
.select(menu.id)
.from(menu)
.join(menu.restaurant, restaurant)
.where(
menuNameEq(name),
restaurantNameEq(restaurantName)
)
.fetchFirst() != null;
}

private BooleanExpression menuNameEq(String name) {
return menu.name.eq(name);
}

private BooleanExpression restaurantNameEq(RestaurantName name) {
return restaurant.restaurantName.eq(name);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package ssu.eatssu.domain.admin.persistence;

import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.data.jpa.repository.support.JpaEntityInformation;
import org.springframework.data.jpa.repository.support.JpaEntityInformationSupport;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import ssu.eatssu.domain.menu.entity.Menu;

@Repository
public class ManageMenuRepository {

@PersistenceContext
private final EntityManager em;

private final JpaEntityInformation<Menu, ?> entityInformation;

public ManageMenuRepository(EntityManager em) {
this.em = em;
this.entityInformation =
JpaEntityInformationSupport.getEntityInformation(Menu.class, em);
}

@Transactional
public Menu save(Menu menu) {
if (entityInformation.isNew(menu)) {
em.persist(menu);
return menu;
} else {
return em.merge(menu);
}
}

@Transactional
public void delete(Menu menu) {

if (entityInformation.isNew(menu)) {
return;
}

Menu existing = em.find(Menu.class, menu.getId());

if (existing == null) {
return;
}

em.remove(em.contains(menu) ? menu : em.merge(menu));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,30 @@

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ssu.eatssu.domain.admin.dto.*;
import ssu.eatssu.domain.admin.persistence.FindRestaurantRepository;
import ssu.eatssu.domain.admin.persistence.FixMenuRatingRepository;
import ssu.eatssu.domain.admin.persistence.ManageFixMenuRepository;
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.restaurant.entity.Restaurant;
import ssu.eatssu.domain.restaurant.entity.RestaurantName;
import ssu.eatssu.domain.restaurant.entity.RestaurantType;
import ssu.eatssu.global.handler.response.BaseException;
import ssu.eatssu.global.handler.response.BaseResponseStatus;

import java.util.List;

@Transactional
@Service
@RequiredArgsConstructor
public class ManageFixMenuService {

private final ManageFixMenuRepository manageFixMenuRepository;
private final LoadFixMenuRepository loadMenuRepository;
private final ManageMenuRepository manageMenuRepository;
private final FixMenuRatingRepository fixMenuRatingRepository;
private final FindRestaurantRepository findRestaurantRepository;

public MenuBoards getMenuBoards() {
MenuBoards menuBoards = new MenuBoards();
Expand All @@ -29,7 +39,7 @@ public MenuBoards getMenuBoards() {
private RestaurantMenuBoard getRestaurantMenuBoard(RestaurantName restaurant) {
FixMenuBoard menuBoard = new FixMenuBoard(restaurant.getDescription());

List<BriefMenu> briefMenus = manageFixMenuRepository.findBriefMenusByRestaurantName(restaurant);
List<BriefMenu> briefMenus = loadMenuRepository.findBriefMenusByRestaurantName(restaurant);

briefMenus.forEach(briefMenu ->
menuBoard.addMenu(new MenuLine(
Expand All @@ -42,4 +52,13 @@ private RestaurantMenuBoard getRestaurantMenuBoard(RestaurantName restaurant) {

return menuBoard;
}

public void registerFixMenu(RestaurantName restaurantName, RegisterMenuRequest request) {
if (loadMenuRepository.existsMenu(request.name(), restaurantName)) {
throw new BaseException(BaseResponseStatus.CONFLICT);
}
Restaurant restaurant = findRestaurantRepository.findByRestaurantName(restaurantName);

manageMenuRepository.save(Menu.createFixMenu(request.name(), restaurant, request.price()));
}
}
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 @@ -54,6 +54,10 @@ public static Menu createChangeMenu(String name, Restaurant restaurant) {
return new Menu(name, restaurant, price);
}

public static Menu createFixMenu(String name, Restaurant restaurant, Integer price) {
return new Menu(name, restaurant, price);
}

/**
* 고정 메뉴를 생성합니다.
* todo: 고정메뉴 식당이 아니라 변동 메뉴 식당으로 잘못 들어온다면 어떻게 처리?
Expand Down

0 comments on commit 84a9d2b

Please sign in to comment.