Category: 강의

0

레스토랑 예약 사이트 1 - 레스토랑 관리(관리자) 레스토랑 생성

3. 레스토랑 추가하기레스토랑 생성 요청을 처리하기 위한 control 추가Http 메소드들 중에서 post메소드를 사용해 새로운 레스토랑을 추가하는 요청을 처리할 것이고, /restaurnt경로로 요청이 들어올 경우 request body에 들어가 있는 데이터를 가져와 새로운 레스토랑을 생성한다. @PostMapping("/restaurants")public ResponseEntity<?> create(@RequestBody Restaurant resource) throws URISyntaxException { String name = resource.getName(); String address = resource.getAddress(); Restaurant restaurant = Restaurant.builder() .name(name) .address(address) .build(); restaurantService.addRestaurant(restaurant); URI location = new URI("/restaurants/" + restaurant.getId()); return ResponseEntity.created(location).body("{}");} 요청에 대한 레스토랑 생성 테스트 코드 작성POJO를 JSON형태로 변환하기 위해 Jackson라이브러리의 ObjectMapper를 사용할 것이다.ObjectMapper를 통해 Restaurant객체를 JSON String 형태로 변환해 request body에 넣어 /restaurants경로로 post요청을 한다. @Autowiredprivate ObjectMapper objectMapper;@Testpublic void 새로운_레스토랑_저장하기() throws Exception { String BobZip = "BobZip"; String Seoul = "Seoul"; Restaurant restaurant = Restaurant.builder() .categoryId(1L) .name(BobZip) .address(Seoul) .build(); // POJO를 JSON형태로 변환해준다. String content = objectMapper.writeValueAsString(restaurant); ResultActions resultActions = mockMvc.perform(post("/restaurants") .content(content) .contentType(MediaType.APPLICATION_JSON)); resultActions .andExpect(status().isCreated()) .andDo(print());} 새로운 레스토랑을 생성하는 요청을 한 후 레스토랑의 정보를 가져오는 요청을 해 해당 정보가 제대로 생성 됐는지 확인한다. @Testpublic void 새로운_레스토랑_저장_및_조회하기() throws Exception { String BobZip = "BobZip"; String Seoul = "Seoul"; Restaurant restaurant = Restaurant.builder() .categoryId(1L) .name(BobZip) .address(Seoul) .build(); String content = objectMapper.writeValueAsString(restaurant); ResultActions postResultActions = mockMvc.perform(post("/restaurants") .content(content) .contentType(MediaType.APPLICATION_JSON)); postResultActions .andExpect(status().isCreated()) .andDo(print()); List<Restaurant> restaurants = new ArrayList<>(); restaurants.add(restaurant); given(restaurantService.getRestaurants()).willReturn(restaurants); ResultActions getResultActions = mockMvc.perform(get("/restaurants")); getResultActions .andExpect(status().isOk()) .andExpect(jsonPath("$[0].name").value(BobZip)) .andExpect(jsonPath("$[0].address").value(Seoul)) .andDo(print());}

0

레스토랑 예약 사이트 1 - 레스토랑 관리(관리자) 특정 레스토랑 가져오기

2. 특정 레스토랑에 대한 정보 가져오기특정가게에 대한 상세정보 요청을 처리하기 위한 control 추가특정 레스토랑의 정보를 가져오고 싶을 경우 restaurant의 Id값을 이용할 수 있다. /restaurant경로에 사용자가 원하는 restaurantId 를 더해 해당 레스토랑에 대한 정보를 반환하도록 한다. @GetMapping("/restaurants/{id}")public Restaurant detail(@PathVariable Long id) throws Exception { Restaurant restaurant = restaurantService.getRestaurant(id); return restaurant;} 테스트 코드 작성특정 id값으로 갖는 restaurant에 대한 정보를 가져오는 테스트를 구현한다. 요청이 정상적으로 진행된 경우에는 Status으로 200과 함께 해당 레스토랑에 대한 정보를 받을 수 있다. @Testpublic void 특정_가게_상세정보를_가져온다() throws Exception { Restaurant restaurant = Restaurant.builder() .id(1004L) .categoryId(1L) .name("JOKER House") .address("Seoul") .build(); given(restaurantService.getRestaurant(1004L)).willReturn(restaurant); ResultActions resultActions = mockMvc.perform(get("/restaurants/1004")); resultActions .andExpect(status().isOk()) // 레스토랑 정보가 들어있는지 확인한다. .andExpect(content().string(containsString("\"id\":1004"))) .andExpect(content().string(containsString("\"name\":\"JOKER House\"")));} 특정 레스토랑을 가져오는 Service로직RestaurantRepository 객체를 이용해 DB로부터 id값이 일치하는 레스토랑 정보를 가져온다. 만약 해당되는 Restaurant정보가 없다면 RestaurantNotFoundException을 발생시킨다.

0

레스토랑 예약 사이트 1 - 레스토랑 관리(관리자) 모든 레스토랑 가져오기

패스트 캠퍼스에서 레스토량 예약 사이트 만드는 Toy project를 진행 했다. 해당 프로젝트를 진행하면서 배울 수 있었던 것은 TDD, 스프링부트를 이용한 Rest-Api작성 Multi-Module을 이용한 프로젝트 진행을 배울 수 있었다. 강의 내용들을 블로그 포스팅을 통해 다시 되집어 보려고 한다. 관리자 페이지 모든 Restaurant정보 가져오기 특정 Restaurant정보 가져오기 Restaurant 추가하기 Restaurant정보 수정하기 1. 모든 레스토랑에 대한 정보를 가져오기Restaurant Controller 생성레스토랑을 예약하기 위해서 예약할 수 있는 레스토랑 목록을 알아야 한다. /restaurant로 접근하면 모든 레스토랑의 정보를 가져올 수 있도록 한다. RestaurantRepository 로부터 바로 데이터를 가져와 사용자에게 넘겨줘도 되지만, Service 계층을 넣어 데이터를 처리하는 로직과 사용자에게 View를 보여주는 control로직을 분리하도록 한다. @RestController@RequiredArgsConstructorpublic class RestaurantController { private final RestaurantService restaurantService; @GetMapping("/restaurants") public List<Restaurant> list() { List<Restaurant> restaurants = restaurantService.getRestaurants(); return restaurants; }}

0

레스토랑 예약 사이트 1 - 레스토랑 관리 Domain 생성

Restaurant Entity 클래스Restaurant 클래스에는 id , name, address를 저장한다. id : 레스토랑을 구분하기 위한 Id값 name : 레스토랑의 이름 address : 레스토랑의 위치 @Entity@Getter@Setter@NoArgsConstructor@AllArgsConstructor@Builderpublic class Restaurant { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NotEmpty private String name; @NotEmpty private String address;} Restaurant 클래스에 대한 테스트 코드 작성@Testpublic void creation(){ String name = "OutBack"; String address = "Seoul"; long id = 1004L; Restaurant restaurant = new Restaurant(id, name, address); assertThat(restaurant).isNotNull(); assertThat(restaurant.getId()).isEqualTo(id); assertThat(restaurant.getName()).isEqualTo(name); assertThat(restaurant.getAddress()).isEqualTo(address);} Restaurant Repository 생성Restaurant에 대한 정보를 가져오고 저장하고 수정하기 위한 Repository를 생성한다. Repository는 DB에 접근해 CRUD를 실행할 수 있다. @Repositorypublic interface RestaurantRepository extends JpaRepository<Restaurant, Long> {}