
빨간 박스를 누르면 관심상품으로 가져오게 되는데 그때 필요한 정보가
제품명, 링크, 이미지, 현최저가격 (+ 클릭시 팝업으로 원하는 최저가 ) 로 기본 4가지 (입력최저가 포함 5개)
의 정보를 저장 해야한다.
Dto 클래스는 2개가 필요한데
생성단계에서 필요한 기본 4가지 정보를 담은 ProductRequestDto와
내가 원하는 금액을 입력하는 ProductMypriceRequestDto를 만든다.
models > ProductRequestDto.java
@Getter
public class ProductRequestDto {
private String title;
private String link;
private String image;
private int lprice;
}
models > ProductMypriceRequestDto.java
@Getter
public class ProductMypriceRequestDto {
private int myprice;
}
다음으로 product를 수정하는데
@Getter // get 함수를 일괄적으로 만들어줍니다.
@NoArgsConstructor // 기본 생성자를 만들어줍니다.
@Entity // DB 테이블 역할을 합니다.
public class Product extends Timestamped{
// ID가 자동으로 생성 및 증가합니다.
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
// 반드시 값을 가지도록 합니다.
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String image;
@Column(nullable = false)
private String link;
@Column(nullable = false)
private int lprice;
@Column(nullable = false)
private int myprice;
// 관심 상품 생성 시 이용합니다.
public Product(ProductRequestDto requestDto) {
this.title = requestDto.getTitle();
this.image = requestDto.getImage();
this.link = requestDto.getLink();
this.lprice = requestDto.getLprice();
this.myprice = 0;
}
// 관심 가격 변경 시 이용합니다.
public void update(ProductMypriceRequestDto requestDto) {
this.myprice = requestDto.getMyprice();
}
}
내가 원하는 최저가는 nullable이라 생성자에서도 반드시 값을 입력해줘야 한다.
그럼 관심상품을 등록할 때를 생각해 보자
아마도 우리는 기존 최저가보다 높은 금액은 작성하지 못하게 유효성 처리를 할텐데
내가 별도로 원하는 최저가를 입력하지 않는 경우를 0 으로 놓으면
내가 원하는 가격보다 현재 최저가가 더 낮다는 팝업 출력이나 널값이 들어가는걸 막을 수 있다.
이번엔 service를 만들어 보자.
service > ProductService.java
@RequiredArgsConstructor // final로 선언된 멤버 변수를 자동으로 생성합니다.
@Service // 서비스임을 선언합니다.
public class ProductService {
private final ProductRepository productRepository;
@Transactional // 메소드 동작이 SQL 쿼리문임을 선언합니다.
public Long update(Long id, ProductMypriceRequestDto requestDto) {
Product product = productRepository.findById(id).orElseThrow(
() -> new NullPointerException("해당 아이디가 존재하지 않습니다.")
);
product.update(requestDto); //product의 update 메서드
return id;
}
}
우선 productRepository 변수를 final로 선언하여 @RequiredArgsConstructor로 final된 멤버번수를 자동생성 후
메서드에서 productRepository에서 id를 찾지 못한 경우를 예외발생시켜 람다식으로 예외시 띄울 메시지를 작성한다.
이후 product의 update 메서드에 repuestDto를 담아서 가져온다. 이제 service를 통해 PUT을 만들 수 있게 됐다.
그럼 PUT을 만들기 이전에 POST로 먼저 생성을 해보자
controller > ProductRestController.java
@RequiredArgsConstructor
@RestController
public class ProductRestController {
private final ProductRepository productRepository;
@GetMapping("/api/products")
public List<Product> readProducts(){
return productRepository.findAll();
}
@PostMapping("/api/products")
public Product createProduct(@RequestBody ProductRequestDto requestDto){
Product product = new Product(requestDto);
return productRepository.save(product);
}
}
@RestController니까 request받을 수있게 @RequestBody 를 해주고
product에 Dto로 데이터를 담아와서 repository에 저장한다.
'나만의 select shop 만들기' 카테고리의 다른 글
키워드로 상품 검색하기 - NaverShopSearch 발전시키기 (0) | 2020.12.07 |
---|---|
org.json 패키지 설치하기 (0) | 2020.12.06 |
관심 상품 조회하기 (0) | 2020.12.05 |
프로젝트 설계하기 (0) | 2020.12.03 |
자바로 네이버 쇼핑 API 사용해보기 (0) | 2020.12.03 |