배달 웹서비스 제작에서 menu 부분을 만들어보았다.
menu entity
@Entity
@Getter
@NoArgsConstructor
public class Menu extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "menu_id")
private Long id;
@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
@JoinColumn(name = "store")
private Store store;
@Column(name = "menuName")
private String menuName;
@Column(name = "menuInfo")
private String menuInfo;
@Column(name = "menuPrice")
private int menuPrice;
@Column(name = "menuImg")
private String menuImg;
@Column(nullable = false)
@Enumerated(value = EnumType.STRING)
private MenuPossibleEnum possibleEnum;
public Menu (MenuRequestDto requestDto,Store store){
this.menuName = requestDto.getMenuName();
this.menuInfo = requestDto.getMenuInfo();
this.menuPrice = requestDto.getMenuPrice();
this.menuImg = requestDto.getMenuImg();
this.possibleEnum = requestDto.getMenuPossibleEnum();
this.store = store;
}
public void updateMenu(MenuUpdateRequestDto requestDto,Store store){
this.menuName = requestDto.getMenuName();
this.menuInfo = requestDto.getMenuInfo();
this.menuPrice = requestDto.getMenuPrice();
this.menuImg = requestDto.getMenuImg();
this.possibleEnum = requestDto.getMenuPossibleEnum();
this.store=store;
}
public void deleteMenu(MenuPossibleEnum possibleEnum){
this.possibleEnum = possibleEnum;
}
menu controller
@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
public class MenuController {
private final MenuService menuService;
@PostMapping("/stores/{storeId}/menus")
public ResponseEntity<String> saveMenu(@Auth AuthUser authUser, @PathVariable Long storeId, @RequestBody MenuRequestDto requestDto){
menuService.saveMenu(authUser,storeId,requestDto);
return ResponseEntity.ok().body(HttpStatus.OK + "메뉴 등록이 정상적으로 되었습니다.");
}
@PutMapping("/stores/{storeId}/menus/{menuId}")
public ResponseEntity<String> updateMenu(@Auth AuthUser authUser,@PathVariable Long storeId,@PathVariable Long menuId,@RequestBody MenuUpdateRequestDto requestDto){
menuService.updateMenu(authUser,storeId,menuId,requestDto);
return ResponseEntity.ok().body(HttpStatus.OK + "메뉴 수정이 정상적으로 작동 하였습니다.");
}
@GetMapping("/store/{storeId}/menus/{menuId}")
public ResponseEntity<String> deleteMenu(@Auth AuthUser authUser,@PathVariable Long storeId,@PathVariable Long menuId){
menuService.deleteMenu(authUser,storeId,menuId);
return ResponseEntity.ok().body(HttpStatus.OK + "메뉴 삭제가 정상적으로 작동 하였습니다.");
}
}
menu service
@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class MenuService {
private final MenuRepository menuRepository;
private final StoreRepository storeRepository;
private final UserRepository userRepository;
@Transactional
public void saveMenu(AuthUser authUser, Long storeId, MenuRequestDto requestDto) {
//가게 주인 확인 메서드
Store store = validateStoreOwner(authUser,storeId);
//등록할 메뉴 생성
Menu menu = new Menu(requestDto,store);
//메뉴 저장
menuRepository.save(menu);
}
@Transactional
public void updateMenu(AuthUser authUser, Long storeId, Long menuId, MenuUpdateRequestDto requestDto) {
Store store = validateStoreOwner(authUser,storeId);
//등록되어있는지 메뉴 확인
Menu menu = menuRepository.findById(menuId).orElseThrow(() -> new NullPointerException("해당 메뉴가 존재 하지 않습니다."));
//업데이트 된 request를 받아서 저장
menu.updateMenu(requestDto,store);
menuRepository.save(menu);
}
@Transactional
public void deleteMenu(AuthUser authUser, Long storeId, Long menuId) {
Store store = validateStoreOwner(authUser,storeId);
//등록되어있는지 메뉴 확인
Menu menu = menuRepository.findById(menuId).orElseThrow(()->new NullPointerException("해당 메뉴가 존재 하지 않습니다."));
menu.deleteMenu(DELETE);
//등록되어있는 메뉴 상태 변화
menuRepository.save(menu);
}
private Store validateStoreOwner(AuthUser authUser, Long storeId) {
// 가게 존재 확인
Store store = storeRepository.findById(storeId).orElseThrow(() -> new NullPointerException("해당 가게가 존재하지 않습니다."));
// 가게 주인 확인
User user = userRepository.findById(authUser.getId()).orElseThrow(() -> new EntityNotFoundException("해당 유저가 존재하지 않습니다."));
// 가게의 주인과 유저가 일치하는지 확인
if (!user.getId().equals(store.getUser().getId())) {
throw new NullPointerException("해당 가게의 주인이 아닙니다.");
}
return store;
}
}
위 코드로 메뉴 생성 , 수정 ,삭제를 구현하였다.
'java 배우기 > TIL' 카테고리의 다른 글
| 오류 정리 하기[org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'menuCategoryEnum' for method parameter type MenuCategoryEnum is present but converted to null] (0) | 2024.09.24 |
|---|---|
| 메뉴에 카테고리 추가하기 (1) | 2024.09.24 |
| Java Stream 사용법 (0) | 2024.09.20 |
| fork 한 프로젝트 깃허브에 잔디 심기 (0) | 2024.09.12 |
| Java Stream (0) | 2024.09.12 |