본문 바로가기
Spring

네이버 지역검색 API를 활용한 맛집 List 제작 - (4)

코동이 2021. 8. 29.

1. wishListEntity 생성

2. Controller 생성

3. 검색, 조회, 위시리스트 삭제, 방문추가 Service 생성

 

1. wishListEntity 생성

@NoArgsConstructor
@AllArgsConsctructor
@Data
public class WishListEntity extends MemoryDbEntity {
 ...
}

 

2. Controller 생성

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/restaurant")
public class ApiController {
 private final WishListService wishListService;

 @GetMapping("/search")
 public WishListDto search(@RequestParam String query) {
  return wishListService.search(query);
 }

 @PostMapping("")
 public WishListDto add(@ReqeustBody WishListDto wishListDto) {
  return wishListService.add(wishListDto);
 }

 @GetMapping("/all")
 public List<WishListDto> findAll() {
  return wishListRepository.findAll();
 }

  @DeleteMapping("/{index}")
  public void delete(@PathVariable int index) {
   wishListRepository.delete(index);
 }

  @PostMapping("/{index}")
  public void addVisit(@PathVariable int index) {
   wishListService.addVisit(index);
  } 
}

 

3. 검색, 조회 Service 생성

public class WishListService {
 private WishListRepository wishListRepository;

 public WishListDto add(WishListDto wishListDto) {
  var entity = dtoToEntity(wishListDto);
  var saveEntity = wishListRepository.save(entity);
  return entityToDto(saveEntity);
 }
 
 public void delete(int index) {
  wishListRepository.deleteById(index);
 }

 public void addVisit(int index) {
  var wishItem = wishListRepository.findById(index);
  if(wishItem.isPresnet()) {
    var item = wishItem.get();
    item.setVisit(true);
    item.setVisitCount(item.getVisitCount() + 1);
  }

 public List<WishListDto> findAll() {
  return wishListRepository.listAll()
	.stream()
	.map(it -> entityToDto(it))
	.collect(Collectors.toList());
 }

 private WishListDto dtoToEntity(WishListDto wishListDto) {
  var dto = new WishListDto();
  dto.setTitle(wishListDto .getTitle());
  dto.setCategory(wishListDto.getCategory());
  dto.setAddress(wishListDto.getAddress());
  ...
  return dto;
 } 

  private WishListEntity EntityToDto(WishListEntity wishListEntity) {
  var entity = new WishListEntity();
  entity.setTitle(wishListEntity .getTitle());
  entity.setCategory(wishListEntity.getCategory());
  entity.setAddress(wishListEntity.getAddress());
  ...
  return entity;
 } 
}

 

 EntityToDto와 DtoToEntity는 Entity를 보존하기 위한 메서드이다. 보통 엔티티 편의 메서드를 사용해서 각각 WishListEntity와 WishListDto 클래스에 구현한다.

 

 Controller에서 Service까지 필요한 값들이 매개변수로 넘어 올 때, Dto에 담아서 오며, 내부 DB를 변경할 때는, 필요 시에 Repository에서 Entity를 호출해서 변경을 한다. 매개변수에 Dto가 아닌 Entity를 직접 이용한다면, 혹시 사람의 실수로 중간에 Entity 값이 바뀌면, 원치 않은 값의 수정이 일어나 의도되지 않은 코드를 짜기가 쉽다. 따라서, 안전하게 방어적인 코드를 짜고 자, 데이터가 클래스 사이를 이동할 때 Dto를 적극적으로 이용하여서 전달하도록 한다.

반응형