feat(store): [API] 아이템 고유번호로 아이템 정보 찾기 구현
This commit is contained in:
@@ -2,22 +2,17 @@ package com.justpickup.storeservice.domain.item.web;
|
||||
|
||||
import com.justpickup.storeservice.domain.item.dto.ItemDto;
|
||||
import com.justpickup.storeservice.domain.item.service.ItemService;
|
||||
import com.justpickup.storeservice.domain.itemoption.dto.ItemOptionDto;
|
||||
import com.justpickup.storeservice.domain.itemoption.entity.OptionType;
|
||||
import com.justpickup.storeservice.global.dto.Result;
|
||||
import com.justpickup.storeservice.global.entity.Yn;
|
||||
import lombok.*;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.web.PageableDefault;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
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;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
|
||||
@@ -31,7 +31,6 @@ public class ItemOption extends BaseEntity {
|
||||
// == 연관관계 편의 메소드 == //
|
||||
public void setItem(Item item) {
|
||||
this.item = item;
|
||||
item.getItemOptions().add(this);
|
||||
}
|
||||
|
||||
public ItemOption(OptionType optionType, String name, Item item) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.justpickup.storeservice.global;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.justpickup.storeservice.domain.category.entity.Category;
|
||||
import com.justpickup.storeservice.domain.category.repository.CategoryRepository;
|
||||
import com.justpickup.storeservice.domain.favoritestore.entity.FavoriteStore;
|
||||
@@ -12,22 +13,76 @@ import com.justpickup.storeservice.domain.map.entity.Map;
|
||||
import com.justpickup.storeservice.domain.store.entity.Store;
|
||||
import com.justpickup.storeservice.domain.store.repository.StoreRepository;
|
||||
import com.justpickup.storeservice.global.entity.Address;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class SqlCommandLineRunner implements CommandLineRunner {
|
||||
|
||||
private final StoreRepository storeRepository;
|
||||
private final FavoriteStoreRepository favoriteStoreRepository;
|
||||
private final ItemRepository itemRepository;
|
||||
private final CategoryRepository categoryRepository;
|
||||
private final ObjectMapper objectMapper;
|
||||
|
||||
@Data
|
||||
static class _Store {
|
||||
private Long id;
|
||||
private String name;
|
||||
private List<_Item> items = new ArrayList<>();
|
||||
|
||||
public _Store(Store store) {
|
||||
this.id = store.getId();
|
||||
this.name = store.getName();
|
||||
this.items = store.getItems()
|
||||
.stream()
|
||||
.map(_Item::new)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@NoArgsConstructor @Data
|
||||
static class _Item {
|
||||
private Long id;
|
||||
private String name;
|
||||
private Long price;
|
||||
List<_ItemOption> itemOptions = new ArrayList<>();
|
||||
|
||||
public _Item(Item item) {
|
||||
this.id = item.getId();
|
||||
this.name = item.getName();
|
||||
this.price = item.getPrice();
|
||||
this.itemOptions = item.getItemOptions()
|
||||
.stream()
|
||||
.map(_ItemOption::new)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
||||
@NoArgsConstructor @Data
|
||||
static class _ItemOption {
|
||||
private Long id;
|
||||
private String name;
|
||||
|
||||
public _ItemOption(ItemOption itemOption) {
|
||||
this.id = itemOption.getId();
|
||||
this.name = itemOption.getName();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void run(String... args) throws Exception {
|
||||
List<Store> stores = new ArrayList<>();
|
||||
@@ -37,9 +92,14 @@ public class SqlCommandLineRunner implements CommandLineRunner {
|
||||
createFavoriteStore(favoriteStoreRepository, stores);
|
||||
|
||||
createItemAndCategories(itemRepository, categoryRepository, stores);
|
||||
|
||||
List<_Store> list = stores.stream().map(_Store::new).collect(Collectors.toList());
|
||||
String json = objectMapper.writeValueAsString(list);
|
||||
log.info("[Test] {}", json);
|
||||
}
|
||||
|
||||
private void createItemAndCategories(ItemRepository itemRepository, CategoryRepository categoryRepository, List<Store> stores) {
|
||||
|
||||
void createItemAndCategories(ItemRepository itemRepository, CategoryRepository categoryRepository, List<Store> stores) {
|
||||
stores.forEach(store -> {
|
||||
Category 카페인 = categoryRepository.save(Category.of("카페인", 0, store));
|
||||
Category 디카페인 = categoryRepository.save(Category.of("디카페인", 1, store));
|
||||
@@ -56,17 +116,20 @@ public class SqlCommandLineRunner implements CommandLineRunner {
|
||||
Item 딸기라떼 = Item.of("딸기라떼", 3000L, 디카페인, store, List.of(ice, hot));
|
||||
Item 녹차 = Item.of("녹차", 3000L, 티, store, List.of(hot));
|
||||
Item 히비스커스 = Item.of("히비스커스 티", 3000L, 티, store, List.of(hot));
|
||||
itemRepository.saveAll(List.of(아메리카노, 카페라떼, 콜드브루, 녹차라떼, 딸기라떼, 녹차, 히비스커스));
|
||||
|
||||
List<Item> items = List.of(아메리카노, 카페라떼, 카페모카, 콜드브루, 녹차라떼, 딸기라떼, 녹차, 히비스커스);
|
||||
itemRepository.saveAll(items);
|
||||
|
||||
items.forEach(item -> store.addItem(item));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private void createFavoriteStore(FavoriteStoreRepository favoriteStoreRepository, List<Store> stores) {
|
||||
void createFavoriteStore(FavoriteStoreRepository favoriteStoreRepository, List<Store> stores) {
|
||||
List<Long> userList = List.of(1L,2L,3L,4L,5L,6L,7L);
|
||||
userList.forEach(userId -> stores.forEach(store -> favoriteStoreRepository.save(FavoriteStore.of(userId, store))));
|
||||
}
|
||||
|
||||
private void createStores(StoreRepository storeRepository, List<Store> stores) {
|
||||
void createStores(StoreRepository storeRepository, List<Store> stores) {
|
||||
stores.add(
|
||||
Store.of(
|
||||
new Address("서울시", "마포구 도화동", "201-20"),
|
||||
|
||||
@@ -5,9 +5,9 @@ import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
|
||||
@FeignClient(name = "USER-SERVICE", url = "127.0.0.1:8001/user-service")
|
||||
@FeignClient("USER-SERVICE")
|
||||
public interface UserClient {
|
||||
|
||||
@GetMapping("/customer/{userId}")
|
||||
Result<GetCustomerResponse> getUser(@PathVariable("userId") Long userId);
|
||||
Result<GetCustomerResponse> getCustomerById(@PathVariable("userId") Long userId);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user