레스토랑 예약 사이트 1 - 레스토랑 관리(관리자) 레스토랑 정보 업데이트

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");
}
Share