fix(owner-vue): refactor

- refactoring 된 url로 수정
This commit is contained in:
hoon7566
2022-03-07 21:26:42 +09:00
parent 5eb5bf118f
commit b73c45dffb
6 changed files with 319 additions and 62 deletions

View File

@@ -2,12 +2,12 @@ import axios from "axios";
export default {
getCategoryList(){
return axios.get(process.env.VUE_APP_OWNER_SERVICE_BASEURL+'/store-service/api/customer/category');
return axios.get(process.env.VUE_APP_OWNER_SERVICE_BASEURL+'/store-service/api/owner/category');
},
putCategoryList(data){
return axios({
method:'put',
url:process.env.VUE_APP_OWNER_SERVICE_BASEURL+'/store-service/api/customer/category',
url:process.env.VUE_APP_OWNER_SERVICE_BASEURL+'/store-service/api/owner/category',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
@@ -17,10 +17,10 @@ export default {
})
},
getItemById(itemId){
return axios.get(process.env.VUE_APP_OWNER_SERVICE_BASEURL+'/store-service/api/customer/item/'+itemId)
return axios.get(process.env.VUE_APP_OWNER_SERVICE_BASEURL+'/store-service/api/owner/item/'+itemId)
},
saveItem(method, itemData){
const _url = process.env.VUE_APP_OWNER_SERVICE_BASEURL+'/store-service/api/customer/item'+(method==='put'?+"/"+itemData.itemId:'')
const _url = process.env.VUE_APP_OWNER_SERVICE_BASEURL+'/store-service/api/owner/item'+(method==='put'?+"/"+itemData.itemId:'')
console.log(_url)
return axios({
method:method,
@@ -34,6 +34,6 @@ export default {
})
},
getMenu(searchParam){
return axios.get(process.env.VUE_APP_OWNER_SERVICE_BASEURL+'/store-service/api/customer/item',searchParam);
return axios.get(process.env.VUE_APP_OWNER_SERVICE_BASEURL+'/store-service/api/owner/item',searchParam);
},
}

View File

@@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@RestController
@@ -27,13 +28,16 @@ public class ItemOwnerApiController {
private final ItemService itemService;
@GetMapping("/item")
public ResponseEntity<Result<GetItemResponse>> getItemList( @RequestParam String word,
public ResponseEntity<Result<GetItemResponse>> getItemList(@RequestParam(required = false) Optional<String> word,
@PageableDefault Pageable pageable,
@RequestHeader(value = "user-id") String userId ){
Long storeId = Long.parseLong(userId);
Page<ItemDto> itemDtoList = itemService.findItemList(storeId,word,pageable);
Page<ItemDto> itemDtoList =
itemService.findItemList(storeId,
word.orElse(""),
pageable);
List<GetItemListResponse.Item> itemList = itemDtoList.stream()
.map(GetItemListResponse.Item::new)
.collect(Collectors.toList());

View File

@@ -4,9 +4,11 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.justpickup.storeservice.config.TestConfig;
import com.justpickup.storeservice.domain.category.dto.CategoryDto;
import com.justpickup.storeservice.domain.category.service.CategoryService;
import com.justpickup.storeservice.domain.favoritestore.repository.FavoriteStoreRepository;
import com.justpickup.storeservice.domain.item.dto.ItemDto;
import com.justpickup.storeservice.domain.store.repository.StoreRepository;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.BDDMockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
@@ -23,6 +25,8 @@ import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import java.util.ArrayList;
import java.util.List;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.springframework.restdocs.payload.PayloadDocumentation.*;
import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName;
import static org.springframework.restdocs.request.RequestDocumentation.requestParameters;
@@ -41,6 +45,13 @@ class CategoryOwnerApiControllerTest {
@MockBean
private CategoryService categoryService;
@MockBean
private StoreRepository storeRepository;
@MockBean
private FavoriteStoreRepository favoriteStoreRepository;
@Test
@DisplayName("카테고리리스트_가져오기_성공")
void getCategoryList_success() throws Exception {
@@ -51,21 +62,25 @@ class CategoryOwnerApiControllerTest {
categoryDtoList.add(CategoryDto.builder()
.id(10L)
.name("카테고리1")
.items(List.of(new ItemDto(1L,"아메리카노",null,5000L)
,new ItemDto(1L,"카페라테",null,5000L)))
.order(1)
.build());
categoryDtoList.add(CategoryDto.builder()
.id(11L)
.name("카테고리2")
.items(List.of(new ItemDto(1L,"비스킷",null,5000L)
,new ItemDto(1L,"와플",null,5000L)))
.order(2)
.build());
BDDMockito.given(categoryService.getCategoryList(1L)).willReturn(categoryDtoList);
given(categoryService.getCategoryList(any())).willReturn(categoryDtoList);
//when
ResultActions actions = mockMvc.perform(MockMvcRequestBuilders
.get("/category")
ResultActions actions = mockMvc.perform(MockMvcRequestBuilders.get("/api/owner/category")
.param("storeId",String.valueOf(storeId))
.header("user-id","2")
);
//then
@@ -85,7 +100,9 @@ class CategoryOwnerApiControllerTest {
fieldWithPath("message").description("메시지"),
fieldWithPath("data[*].categoryId").description("카테고리 고유 번호"),
fieldWithPath("data[*].name").description("카테고리 명"),
fieldWithPath("data[*].order").description("순서")
fieldWithPath("data[*].order").description("순서"),
fieldWithPath("data[*].items[*].id").description("아이템 고유번호"),
fieldWithPath("data[*].items[*].name").description("아이템 명")
)
));
@@ -130,7 +147,7 @@ class CategoryOwnerApiControllerTest {
//when
ResultActions actions = mockMvc.perform(
MockMvcRequestBuilders
.put("/category")
.put("/api/owner//category")
.content(objectMapper.writeValueAsString(putCategoryRequest) )
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)

View File

@@ -2,12 +2,11 @@ package com.justpickup.storeservice.domain.item.web;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.justpickup.storeservice.config.TestConfig;
import com.justpickup.storeservice.domain.favoritestore.repository.FavoriteStoreRepository;
import com.justpickup.storeservice.domain.item.dto.ItemDto;
import com.justpickup.storeservice.domain.item.exception.NotExistItemException;
import com.justpickup.storeservice.domain.item.service.ItemService;
import com.justpickup.storeservice.domain.itemoption.dto.ItemOptionDto;
import com.justpickup.storeservice.domain.itemoption.entity.ItemOption;
import com.justpickup.storeservice.domain.itemoption.entity.OptionType;
import com.justpickup.storeservice.domain.store.repository.StoreRepository;
import com.justpickup.storeservice.global.dto.Code;
import com.justpickup.storeservice.global.entity.Yn;
import org.junit.jupiter.api.DisplayName;
@@ -17,18 +16,12 @@ import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDoc
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Import;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import javax.validation.constraints.NotNull;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.when;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get;
import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath;
import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields;
import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName;
@@ -51,6 +44,12 @@ class ItemControllerTest {
@MockBean
ItemService itemService;
@MockBean
private StoreRepository storeRepository;
@MockBean
private FavoriteStoreRepository favoriteStoreRepository;
@Test
@DisplayName("상품 조회")
void getItem() throws Exception {
@@ -89,8 +88,7 @@ class ItemControllerTest {
fieldWithPath("data.salesYn").description("화면 표시 여부 Y/N"),
fieldWithPath("data.price").description("상품 가격")
)
))
;
));
}
@Test
@@ -124,34 +122,5 @@ class ItemControllerTest {
;
}
@Test
@DisplayName("메뉴 등록")
void created_item_success() throws Exception{
//given
String itemName = "테스트아이템";
Long itemPrice = 3000L;
Long categoryId = 1L;
List<ItemController.ItemRequest.ItemOptionRequest> requiredOption = List.of(new ItemController.ItemRequest.ItemOptionRequest(null, "HOT",OptionType.REQUIRED,null));
List<ItemController.ItemRequest.ItemOptionRequest> otherOption = List.of(new ItemController.ItemRequest.ItemOptionRequest(null, "샷 추가",OptionType.OTHER,null));
ItemController.ItemRequest itemRequest = new ItemController.ItemRequest(null,itemName,itemPrice,categoryId,requiredOption,otherOption);
String body = objectMapper.writeValueAsString(itemRequest);
//when
ResultActions perform = mockMvc.perform(post("/item")
.content(body)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
);
//then
ResultActions resultActions = perform.andExpect(status().isCreated())
.andDo(print());
}
}

View File

@@ -0,0 +1,272 @@
package com.justpickup.storeservice.domain.item.web;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.justpickup.storeservice.config.TestConfig;
import com.justpickup.storeservice.domain.category.dto.CategoryDto;
import com.justpickup.storeservice.domain.favoritestore.repository.FavoriteStoreRepository;
import com.justpickup.storeservice.domain.item.dto.ItemDto;
import com.justpickup.storeservice.domain.item.exception.NotExistItemException;
import com.justpickup.storeservice.domain.item.service.ItemService;
import com.justpickup.storeservice.domain.itemoption.entity.OptionType;
import com.justpickup.storeservice.domain.store.repository.StoreRepository;
import com.justpickup.storeservice.global.dto.Code;
import com.justpickup.storeservice.global.entity.Yn;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Import;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.support.PageableExecutionUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.function.LongSupplier;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.BDDMockito.given;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*;
import static org.springframework.restdocs.payload.PayloadDocumentation.*;
import static org.springframework.restdocs.request.RequestDocumentation.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@WebMvcTest(ItemOwnerApiController.class)
@Import(TestConfig.class)
@AutoConfigureRestDocs(uriHost = "127.0.0.1", uriPort = 8001)
class ItemOwnerApiControllerTest {
@Autowired
ObjectMapper objectMapper;
@Autowired
MockMvc mockMvc;
@MockBean
ItemService itemService;
@MockBean
private StoreRepository storeRepository;
@MockBean
private FavoriteStoreRepository favoriteStoreRepository;
@Test
@DisplayName("상품 리스트 조회")
void getItemList() throws Exception {
// GIVEN
List<ItemDto> items = List.of(
ItemDto.builder()
.id(1L)
.salesYn(Yn.Y)
.price(1500L)
.name("아메리카노")
.itemOptions(new ArrayList<>())
.categoryDto(new CategoryDto())
.build(),
ItemDto.builder()
.id(2L)
.salesYn(Yn.Y)
.price(2000L)
.name("카페라테")
.itemOptions(new ArrayList<>())
.categoryDto(new CategoryDto())
.build()
);
Page<ItemDto> page = PageableExecutionUtils.getPage(items, Pageable.ofSize(10), () -> 1);
given(itemService.findItemList(eq(1L),eq(""),any()))
.willReturn(page);
// WHEN
ResultActions actions = mockMvc.perform(
get("/api/owner/item/")
.header("user-id","1")
.param("word","")
);
// THEN
actions.andExpect(status().isOk())
.andDo(print())
.andDo(document("owner-itemList-get",
requestParameters(
parameterWithName("word").description("아이템 명 or 카테고리 명")
),
responseFields(
fieldWithPath("code").description("결과 코드 SUCCESS/ERROR"),
fieldWithPath("message").description("메시지"),
fieldWithPath("data.itemList[*].id").description("상품 고유 번호"),
fieldWithPath("data.itemList[*].name").description("상품 이름"),
fieldWithPath("data.itemList[*].salesYn").description("화면 표시 여부 Y/N"),
fieldWithPath("data.itemList[*].price").description("상품 가격"),
fieldWithPath("data.itemList[*].categoryName").description("카테고리 명"),
fieldWithPath("data.page.startPage").description("현제 페이지"),
fieldWithPath("data.page.totalPage").description("토탈 페이지")
)
))
;
}
@Test
@DisplayName("상품 조회")
void getItem() throws Exception {
// GIVEN
long itemId = 1L;
ItemDto willReturnDto = ItemDto.builder()
.id(1L)
.salesYn(Yn.Y)
.price(1500L)
.name("아메리카노")
.itemOptions(new ArrayList<>())
.categoryDto(new CategoryDto())
.build();
given(itemService.findFullItemByItemId(itemId))
.willReturn(willReturnDto);
// WHEN
ResultActions actions = mockMvc.perform(
get("/api/owner/item/{itemId}", itemId)
);
// THEN
actions.andExpect(status().isOk())
.andExpect(jsonPath("code").value(Code.SUCCESS.name()))
.andExpect(jsonPath("message").value(""))
.andExpect(jsonPath("data.id").value(itemId))
.andExpect(jsonPath("data.name").value("아메리카노"))
.andExpect(jsonPath("data.salesYn").value(Yn.Y.name()))
.andExpect(jsonPath("data.price").value(1500))
.andDo(print())
.andDo(document("owner-item-get",
pathParameters(
parameterWithName("itemId").description("상품 고유 번호")
),
responseFields(
fieldWithPath("code").description("결과 코드 SUCCESS/ERROR"),
fieldWithPath("message").description("메시지"),
fieldWithPath("data.id").description("상품 고유 번호"),
fieldWithPath("data.name").description("상품 이름"),
fieldWithPath("data.salesYn").description("화면 표시 여부 Y/N"),
fieldWithPath("data.price").description("상품 가격"),
fieldWithPath("data.itemOptions").description("아이템 옵션"),
fieldWithPath("data.categoryId").description("카테고리 고유번호")
)
))
;
}
@Test
@DisplayName("메뉴 등록")
void created_item_success() throws Exception{
//given
String itemName = "테스트아이템";
Long itemPrice = 3000L;
Long categoryId = 1L;
List<ItemOwnerApiController.ItemRequest.ItemOptionRequest> requiredOption =
List.of(new ItemOwnerApiController.ItemRequest.ItemOptionRequest(null, "HOT",OptionType.REQUIRED,null));
List<ItemOwnerApiController.ItemRequest.ItemOptionRequest> otherOption =
List.of(new ItemOwnerApiController.ItemRequest.ItemOptionRequest(null, "샷 추가",OptionType.OTHER,null));
ItemOwnerApiController.ItemRequest itemRequest =
new ItemOwnerApiController.ItemRequest(null,itemName,itemPrice,categoryId,requiredOption,otherOption);
String body = objectMapper.writeValueAsString(itemRequest);
//when
ResultActions perform = mockMvc.perform(post("/api/owner/item")
.header("user-id","2")
.content(body)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
);
//then
ResultActions resultActions = perform.andExpect(status().isCreated())
.andDo(print())
.andDo(document("owner-create-item",
requestFields(
fieldWithPath("itemId").description("아이템 고유번호"),
fieldWithPath("itemName").description("아이템 이름"),
fieldWithPath("itemPrice").description("아이템 가격"),
fieldWithPath("categoryId").description("카테고리 고유번호"),
fieldWithPath("requiredOption").description("필수옵션"),
fieldWithPath("requiredOption[*].id").description("옵션 고유번호"),
fieldWithPath("requiredOption[*].name").description("옵션 이름"),
fieldWithPath("requiredOption[*].optionType").description("옵션 타입"),
fieldWithPath("requiredOption[*].price").description("옵션 가격"),
fieldWithPath("otherOption").description("추가옵션"),
fieldWithPath("otherOption[*].id").description("옵션 고유번호"),
fieldWithPath("otherOption[*].name").description("옵션 이름"),
fieldWithPath("otherOption[*].optionType").description("옵션 타입"),
fieldWithPath("otherOption[*].price").description("옵션 가격")
))
);
}
@Test
@DisplayName("메뉴 수정")
void put_item_success() throws Exception{
//given
String itemName = "테스트아이템";
Long itemPrice = 3000L;
Long categoryId = 1L;
List<ItemOwnerApiController.ItemRequest.ItemOptionRequest> requiredOption =
List.of(new ItemOwnerApiController.ItemRequest.ItemOptionRequest(null, "HOT",OptionType.REQUIRED,null));
List<ItemOwnerApiController.ItemRequest.ItemOptionRequest> otherOption =
List.of(new ItemOwnerApiController.ItemRequest.ItemOptionRequest(null, "샷 추가",OptionType.OTHER,null));
ItemOwnerApiController.ItemRequest itemRequest =
new ItemOwnerApiController.ItemRequest(1L,itemName,itemPrice,categoryId,requiredOption,otherOption);
String body = objectMapper.writeValueAsString(itemRequest);
//when
ResultActions perform = mockMvc.perform(put("/api/owner/item/"+itemRequest.getItemId())
.header("user-id","2")
.content(body)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
);
//then
ResultActions resultActions = perform.andExpect(status().isNoContent())
.andDo(print())
.andDo(document("owner-put-item",
requestFields(
fieldWithPath("itemId").description("아이템 고유번호"),
fieldWithPath("itemName").description("아이템 이름"),
fieldWithPath("itemPrice").description("아이템 가격"),
fieldWithPath("categoryId").description("카테고리 고유번호"),
fieldWithPath("requiredOption").description("필수옵션"),
fieldWithPath("requiredOption[*].id").description("옵션 고유번호"),
fieldWithPath("requiredOption[*].name").description("옵션 이름"),
fieldWithPath("requiredOption[*].optionType").description("옵션 타입"),
fieldWithPath("requiredOption[*].price").description("옵션 가격"),
fieldWithPath("otherOption").description("추가옵션"),
fieldWithPath("otherOption[*].id").description("옵션 고유번호"),
fieldWithPath("otherOption[*].name").description("옵션 이름"),
fieldWithPath("otherOption[*].optionType").description("옵션 타입"),
fieldWithPath("otherOption[*].price").description("옵션 가격")
))
);
}
}

View File

@@ -3,7 +3,6 @@ package com.justpickup.storeservice.domain.store.web;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.justpickup.storeservice.config.TestConfig;
import com.justpickup.storeservice.domain.favoritestore.repository.FavoriteStoreRepository;
import com.justpickup.storeservice.config.TestConfig;
import com.justpickup.storeservice.domain.store.dto.SearchStoreCondition;
import com.justpickup.storeservice.domain.store.dto.SearchStoreResult;
import com.justpickup.storeservice.domain.store.repository.StoreRepository;
@@ -15,7 +14,6 @@ import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDoc
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Import;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.SliceImpl;
@@ -24,20 +22,17 @@ import org.springframework.test.web.servlet.ResultActions;
import java.util.List;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.BDDMockito.given;
import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName;
import static org.springframework.restdocs.headers.HeaderDocumentation.requestHeaders;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get;
import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath;
import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields;
import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName;
import static org.springframework.restdocs.request.RequestDocumentation.requestParameters;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;