4. 레스토랑 정보 업데이트
레스토랑 업데이트 하기 위한 control 추가
레스토랑 정보를 업데이트 하기 위해서는 업데이트 하고자 하는 레스토랑을 가지고 와야 한다. /restaurants
경로뒤에 레스토랑 id를 붙여 요청이 들어오면 id를 이용해 레스토랑을 찾고 request body에 들어있는 정보로 레스토랑을 업데이트 한다.
업데이트 요청을 처리하기 위해 Http 메소드 중에서 patch
메소드를 이용할 것이다.
@PatchMapping("/restaurants/{id}") public String update(@PathVariable("id") Long id, @RequestBody Restaurant restaurant) throws Exception { restaurantService.updateRestaurant(id, restaurant.getName(), restaurant.getAddress());
return "{}"; }
|
업데이트 요청에 대한 테스트 코드 작성
@Test public void 레스토랑정보_업데이트() throws Exception { String JOKER = "JOKER Bar"; String Busan = "Busan";
Restaurant restaurant = Restaurant.builder() .categoryId(1L) .name(JOKER) .address(Busan) .build();
String content = objectMapper.writeValueAsString(restaurant);
ResultActions resultActions = mockMvc.perform(patch("/restaurants/1004") .contentType(MediaType.APPLICATION_JSON) .content(content));
resultActions .andExpect(status().isOk()) .andDo(print());
verify(restaurantService).updateRestaurant(1004L, JOKER, Busan); }
|
레스토랑 업데이트를 하기 위한 Service 메소드
먼저 id를 갖고 저장돼 있는 해당 레스토랑을 가져온 후 전달 받은 name값과 address값으로 업데이트 한다. 만약 해당 레스토랑이 없을 경우 RestaurantNotFoundException
예외를 일으키도록 한다.
@Transactional public Restaurant updateRestaurant(Long id, String name, String address) throws Exception { Optional<Restaurant> optional = restaurantRepository.findById(id);
if (optional.isPresent()) { Restaurant restaurant = optional.get(); restaurant.setName(name); restaurant.setAddress(address);
return restaurant; } else { throw new RestaurantNotFoundException(id); } }
|
업데이트에 대한 테스트 코드
@Test public void 레스토랑정보_업데이트() throws Exception { Restaurant restaurant = Restaurant.builder() .id(1004L) .name("Bob zip") .address("Seoul") .build();
given(restaurantRepository.findById(1004L)) .willReturn(Optional.of(restaurant));
Restaurant updated = restaurantService.updateRestaurant(1004L, "Sool zip", "Busan");
assertThat(updated.getName()).isEqualTo("Sool zip"); assertThat(updated.getAddress()).isEqualTo("Busan"); }
|