Spring Framework

나만의셀렉샵) 관심 상품 등록하기

na_o 2021. 7. 26. 18:59
728x90

상품 검색 후 등록 버튼을 클릭했을 때 관심 상품이 생성되어야 함

-> 검색 결과에서 제목, 이미지, 링크, 최저가를 가져오면 됨

 

1st) 제목, 이미지, 링크, 최저가 데이터 가져와서 관심상품 등록

2nd) 내가 원하는 최저가 입력해서 등록한 관심상품 데이터 수정

 

- Dto 만들기

/*ProductRequestDto.java*/

package com.sparta.week04.models;

...

@Getter
public class ProductRequestDto {
    private String title;
    private String link;
    private String image;
    private int lprice;

}
/*ProductMypriceRequestDto.java*/

package com.sparta.week04.models;

...

@Getter
public class ProductMypriceRequestDto {
    private int myprice;
}

 

- Product 클래스에 생성자, update 메소드 만들기

/*Product.java*/

package com.sparta.week04.models;

...

@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();
        //nullable = false로 설정되어있어서 값이 입력되어있어야 함 & 현재가격 < 사용자설정가격 을 벗어나면 노란딱지가 안 뜸
        this.myprice = 0;
    }

    // 관심 가격 변경 시 이용합니다.
    public void update(ProductMypriceRequestDto requestDto) {
        this.myprice = requestDto.getMyprice();
    }

}
package com.sparta.week04.service;

...

@RequiredArgsConstructor //final로 선언된 멤버 변수를 자동으로 생성
@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 product.getId();
    }

}

 

- Controller에 관심 상품 등록 메소드 만들기

/*ProductRestController.java*/

package com.sparta.week04.controller;

...

@RequiredArgsConstructor //final로 선언된 멤버 변수를 자동으로 생성
@RestController //JSON으로 데이터를 주고받음을 선언
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);
    }

}