diff --git a/owner-vue/src/views/Menu.vue b/owner-vue/src/views/Menu.vue index 44398f6..2b475eb 100644 --- a/owner-vue/src/views/Menu.vue +++ b/owner-vue/src/views/Menu.vue @@ -9,6 +9,7 @@ :name="modalSet.words.register" @save="itemSave" @addItemOption="addItemOption" + @init="getModalData" /> @@ -162,7 +163,7 @@ export default { var vm =this; this.modalData = { itemName : '', - itemPrice : 0, + itemPrice : '', categoryId: 0, categoryList : [], requiredOption : [], @@ -190,9 +191,7 @@ export default { responseType:'json' }) .then(function (response) { - console.log(response) var item = response.data.data; - console.log(item) vm.modalData.itemId = item.id; vm.modalData.itemName = item.name; vm.modalData.itemPrice = item.price; diff --git a/owner-vue/src/views/MenuItem.vue b/owner-vue/src/views/MenuItem.vue index df6775e..8894259 100644 --- a/owner-vue/src/views/MenuItem.vue +++ b/owner-vue/src/views/MenuItem.vue @@ -27,6 +27,7 @@ > @@ -38,6 +39,7 @@ > @@ -49,6 +51,7 @@ itemOptions; // == 연관관계 편의 메소드 ==// @@ -62,9 +64,10 @@ public class Item extends BaseEntity { category.getItems().add(this); } - public void setItemNameAndPrice(String name , Long price){ + public void setItemNameAndPriceAndCategory(String name , Long price,Category category){ this.name = name; this.price = price; + this.category = category; } // == 생성 메소드 == // @@ -75,4 +78,12 @@ public class Item extends BaseEntity { itemOptions.forEach(item::addItemOption); return item; } + + public static Item createdFullItem(Category category, Store store, List itemOptions, String name , Long price) { + Item item = new Item(); + item.setItemNameAndPriceAndCategory( name, price ,category); + item.setStore(store); + itemOptions.forEach(item::addItemOption); + return item; + } } diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemService.java b/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemService.java index 475c012..438f696 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemService.java +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemService.java @@ -14,5 +14,7 @@ public interface ItemService { Page findItemList(Long storeId,String word, Pageable pageable); - void putItem(Long itemId, String itemName, Long itemPrice, List itemOption); + void putItem(Long itemId, String itemName, Long itemPrice, Long categoryId, List itemOptionDtos); + + void createItem( Long storeId, String itemName, Long itemPrice, Long categoryId, List itemOptionDtos); } diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemServiceImpl.java b/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemServiceImpl.java index 7433e29..cfea4ed 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemServiceImpl.java +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/item/service/ItemServiceImpl.java @@ -1,5 +1,7 @@ package com.justpickup.storeservice.domain.item.service; +import com.justpickup.storeservice.domain.category.entity.Category; +import com.justpickup.storeservice.domain.category.repository.CategoryRepository; import com.justpickup.storeservice.domain.item.dto.ItemDto; import com.justpickup.storeservice.domain.item.entity.Item; import com.justpickup.storeservice.domain.item.exception.NotExistItemException; @@ -8,6 +10,7 @@ import com.justpickup.storeservice.domain.item.repository.ItemRepositoryCustom; import com.justpickup.storeservice.domain.itemoption.dto.ItemOptionDto; import com.justpickup.storeservice.domain.itemoption.entity.ItemOption; import com.justpickup.storeservice.domain.itemoption.repository.ItemOptionRepository; +import com.justpickup.storeservice.domain.store.entity.Store; import com.justpickup.storeservice.domain.store.repository.StoreRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -17,8 +20,8 @@ import org.springframework.data.support.PageableExecutionUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; @Service @@ -28,11 +31,13 @@ import java.util.stream.Collectors; public class ItemServiceImpl implements ItemService { private final ItemRepository itemRepository; - private final ItemOptionRepository itemOptionRepository; private final ItemRepositoryCustom itemRepositoryCustom; + private final ItemOptionRepository itemOptionRepository; + private final CategoryRepository categoryRepository; private final StoreRepository storeRepository; + @Override public ItemDto findItemByItemId(Long itemId) { Item findItem = itemRepository.findById(itemId) @@ -52,20 +57,48 @@ public class ItemServiceImpl implements ItemService { @Override @Transactional - public void putItem(Long itemId, String itemName, Long itemPrice, List itemOptionDtos) { + public void putItem(Long itemId, + String itemName, + Long itemPrice, + Long categoryId, + List itemOptionDtos) { Item item = itemRepository.findById(itemId) .orElseThrow(() -> new NotExistItemException("존재하지 않는 아이템 입니다.")); - item.setItemNameAndPrice(itemName,itemPrice); - itemOptionDtos.stream() - .map(itemOptionDto -> { - if(itemOptionDto.getId()==null) - return ItemOptionDto.createItemOption(itemOptionDto,item); - else - return itemOptionRepository.findById(itemOptionDto.getId()) - .orElseThrow(() -> new NotExistItemException("존재하지 않는 아이템 옵션 입니다.")); - }) - .forEach(itemOptionRepository::save); + Category category = categoryRepository.findById(categoryId) + .orElseThrow(() -> new NotExistItemException("존재하지 않는 카테고리 입니다.")); + + item.setItemNameAndPriceAndCategory(itemName,itemPrice,category); + + itemOptionDtos + .forEach(itemOptionDto -> { + if (itemOptionRepository.existsById(itemOptionDto.getId())) + itemOptionRepository.save(ItemOptionDto.createItemOption(itemOptionDto, item)); + }); + } + + @Override + @Transactional + public void createItem(Long storeId, + String itemName, + Long itemPrice, + Long categoryId, + List itemOptionDtos) { + + //find Store + Store store = storeRepository.findById(storeId) + .orElseThrow(() -> new NotExistItemException("존재하지 않는 매장 입니다.")); + + //find Category + Category category = categoryRepository.findById(categoryId) + .orElseThrow(() -> new NotExistItemException("존재하지 않는 카테고리 입니다.")); + + //create Item + Item item = Item.createdFullItem(category,store,new ArrayList<>() ,itemName, itemPrice); + + //add ItemOption + itemOptionDtos.forEach((itemOptionDto -> + itemOptionRepository.save(ItemOptionDto.createItemOption(itemOptionDto, item)))); } } diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/item/web/ItemController.java b/store-service/src/main/java/com/justpickup/storeservice/domain/item/web/ItemController.java index f674b76..856263e 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/domain/item/web/ItemController.java +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/item/web/ItemController.java @@ -14,6 +14,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; import java.util.List; import java.util.stream.Collectors; @@ -131,19 +133,20 @@ public class ItemController { } @PutMapping("/item") - public ResponseEntity putItem(@RequestBody ItemRequest putItemRequest){ + public ResponseEntity putItem(@RequestBody @Valid ItemRequest itemRequest){ - List itemOption = putItemRequest.getRequiredOption().stream().map(ItemRequest.ItemOptionRequest::createItemDto).collect(Collectors.toList()); - itemOption.addAll(putItemRequest.getOtherOption().stream().map(ItemRequest.ItemOptionRequest::createItemDto).collect(Collectors.toList())); + List itemOption = itemRequest.getRequiredOption().stream().map(ItemRequest.ItemOptionRequest::createItemDto).collect(Collectors.toList()); + itemOption.addAll(itemRequest.getOtherOption().stream().map(ItemRequest.ItemOptionRequest::createItemDto).collect(Collectors.toList())); - itemService.putItem(putItemRequest.getItemId() - , putItemRequest.getItemName() - , putItemRequest.getItemPrice() + itemService.putItem(itemRequest.getItemId() + , itemRequest.getItemName() + , itemRequest.getItemPrice() + , itemRequest.getCategoryId() , itemOption); return ResponseEntity.status(HttpStatus.NO_CONTENT) - .body(Result.createSuccessResult(null)); + .body(Result.success()); } @Data @@ -152,8 +155,12 @@ public class ItemController { @Builder public static class ItemRequest { private Long itemId; + @NotNull private String itemName; + @NotNull private Long itemPrice; + @NotNull + private Long categoryId; private List requiredOption; private List otherOption; @@ -179,4 +186,24 @@ public class ItemController { } } + @PostMapping("/item") + public ResponseEntity createItem( @RequestBody @Valid ItemRequest itemRequest){ + + Long storeId = 1L; + + List itemOption = itemRequest.getRequiredOption().stream().map(ItemRequest.ItemOptionRequest::createItemDto).collect(Collectors.toList()); + itemOption.addAll(itemRequest.getOtherOption().stream().map(ItemRequest.ItemOptionRequest::createItemDto).collect(Collectors.toList())); + + itemService.createItem(storeId + , itemRequest.getItemName() + , itemRequest.getItemPrice() + , itemRequest.getCategoryId() + , itemOption); + + + return ResponseEntity.status(HttpStatus.CREATED) + .body(Result.success()); + + } + } diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/itemoption/entity/ItemOption.java b/store-service/src/main/java/com/justpickup/storeservice/domain/itemoption/entity/ItemOption.java index f1a24aa..d3bb75a 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/domain/itemoption/entity/ItemOption.java +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/itemoption/entity/ItemOption.java @@ -26,7 +26,7 @@ public class ItemOption extends BaseEntity { private String name; - @ManyToOne(fetch = LAZY) + @ManyToOne(fetch = LAZY , cascade = CascadeType.ALL) @JoinColumn(name = "item_id") private Item item; diff --git a/store-service/src/main/java/com/justpickup/storeservice/global/dto/Result.java b/store-service/src/main/java/com/justpickup/storeservice/global/dto/Result.java index cb2777d..73b8c47 100644 --- a/store-service/src/main/java/com/justpickup/storeservice/global/dto/Result.java +++ b/store-service/src/main/java/com/justpickup/storeservice/global/dto/Result.java @@ -33,4 +33,12 @@ public class Result { .data(data) .build(); } + + public static Result success(){ + return Result.builder() + .code(Code.SUCCESS) + .message("성공") + .data(null) + .build(); + } }