1. 관심 상품 등록하기
- 상품을 검색한 후, 등록 버튼을 눌렀을 때 관심 상품이 생성
(검색 결과에서 제목, 이미지, 링크, 최저가 필요)
- models 패키지 (src > main > java > com.sparta.week04 > models)
ProductRequestDto 클래스 만들기
- 멤버 변수 선언 (제목, 링크, 이미지, 최저가)
package com.sparta.week04.models;
public class ProductRequestDto {
private String title;
private String link;
private String image;
private int lprice;
}
- getter 메소드 자동 생성: 각각을 꺼낼 수 있도록 설정
@Getter
public class ProductRequestDto {
private String title;
private String link;
private String image;
private int lprice;
}
ProductMypriceRequestDto 클래스 만들기
- 멤버 변수 선언 (관심가격)
public class ProductMypriceRequestDto {
private int myprice;
}
- getter 메소드 자동 생성: 꺼내서 쓸수 있도록 설정
package com.sparta.week04.models;
import lombok.Getter;
@Getter
public class ProductMypriceRequestDto {
private int myprice;
}
Product 클래스 개선하기
- models 패키지 (src > main > java > com.sparta.week04 > models)
- Product 클래스 생성자 생성: 관심상품 정보를 가지고 있는 ProductRequestDto 전달
- 관심가격 not null이므로 0으로 설정: 관심가격 > 가격이면 나오도록 설정, 가장 적은 0으로 설정
package com.sparta.week04.models;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Getter
@NoArgsConstructor
@Entity
public class Product extends Timestamped{
@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 productRequestDto){
this.title = productRequestDto.getTitle();
this.link = productRequestDto.getLink();
this.image = productRequestDto.getImage();
this.lprice = productRequestDto.getLprice();
this.myprice = 0;
}
}
ProductService 만들기
- service 패키지 (src > main > java > com.sparta.week04 > service)
- update 메소드 생성: ID, 관심가격 productMypriceRequestDto 사용하여 수정
- 서비스임을 선언
@Service
public class ProductService {
public Long update(Long id, ProductMypriceRequestDto requestDto) {
}
}
- Repository 선언: Repository 사용해서 ID 찾음
- final 추가: 반드시 사용하도록, RequiredArgsConstructor: final로 선언된 멤버 변수를 자동으로 생성
package com.sparta.week04.service;
import com.sparta.week04.models.ProductMypriceRequestDto;
import com.sparta.week04.models.ProductRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@RequiredArgsConstructor
@Service
public class ProductService {
private final ProductRepository productRepository;
public Long update(Long id, ProductMypriceRequestDto mypriceRequestDto){
}
}
- ID 찾아서 product update
- 메소드 동작이 SQL 쿼리문임을 선언: DB정보 update해줘야 함
@RequiredArgsConstructor
@Service
public class ProductService {
private final ProductRepository productRepository;
@Transactional
public Long update(Long id, ProductMypriceRequestDto requestDto) {
Product product = productRepository.findById(id).orElseThrow(
() -> new NullPointerException("해당 아이디가 존재하지 않습니다.")
);
product.update(requestDto);
return id;
}
}
- Product 클래스 개선 (관심 가격 변경)
package com.sparta.week04.models;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Getter
@NoArgsConstructor
@Entity
public class Product extends Timestamped{
@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 productRequestDto){
this.title = productRequestDto.getTitle();
this.link = productRequestDto.getLink();
this.image = productRequestDto.getImage();
this.lprice = productRequestDto.getLprice();
this.myprice = 0;
}
public void update(ProductMypriceRequestDto requestDto){
this.myprice = requestDto.getMyprice();
}
}
ProductRestController 개선하기
- PostMapping 설정 (/api/products)
- productRepository 저장하는 기능 설정
- requestDto를 전달하여 Product 생성자 생성
package com.sparta.week04.models;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RequiredArgsConstructor
@RestController
public class ProductRestController {
private final ProductRepository productRepository;
@GetMapping("/api/products")
public List<Product> getProducts() {
return productRepository.findAll();
}
@PostMapping("/api/products")
public Product createProduct(@RequestBody ProductRequestDto requestDto) {
Product product = new Product(requestDto);
productRepository.save(product);
return product;
}
}