스프링 부트와 JPA 활용1 - 상품 도메인 개발 1

JOY·2022년 4월 4일
0
post-thumbnail

📌 스프링 부트와 JPA 활용1 - 상품 도메인 개발 1

인프런 - 스프링 부트와 JPA 활용1 by 김영한 을 기반으로 작성된 글입니다.
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발


상품 도메인 개발 목차

1. 상품 엔티티 개발(비즈니스 로직 추가)

2. 상품 리포지토리 개발

3. 상품 서비스 개발


구현 기능

  • 상품 등록
  • 상품 목록 조회
  • 상품 수정

1. 상품 엔티티 개발(비즈니스 로직 추가)

1) 상품 엔티티 (Item.java)

💻 코드

package jpabook.jpashop.domain.item;

import jpabook.jpashop.domain.Category;
import jpabook.jpashop.domain.exception.NotEnoughStockException;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
/*상속관계 매핑, 전략 지정 = 싱글테이블*/
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="dtype")
@Getter @Setter
public abstract class Item {

    @Id @GeneratedValue
    @Column(name="item_id")
    private Long id;

    private String name;
    private int price;
    private int stockQuantity;

    @ManyToMany(mappedBy = "items")
    private List<Category> categories = new ArrayList<>();

    //==비즈니스 로직==//
    /** stock 증가 */
    public void addStock(int quantity){
        this.stockQuantity += quantity;
    }

    /** stock 감소 */
    public void removeStock(int quantity){
        int restStock = this.stockQuantity - quantity;
        if (restStock < 0){
            throw new NotEnoughStockException("need more stock");
        }
        this.stockQuantity = restStock;
    }
 }

📍 설명

1) 기능 설명

비즈니스 로직 분석

  • addStock() : quantity 파라미터로 넘어온 수 만큼 재고 증가
  • removeStock() : quantity 파라미터로 넘어온 수만큼 재고 감소, 만약 재고가 부족하면 예외 발생

💡 데이터를 가지고 있는 쪽에 비즈니스 메서드가 있는 것이 좋다 👉 응집력 높음

💡 변수 값을 변경해야 할 때
@Setter 대신 핵심 비즈니스 메서드로 변경해야 하는 것이 더 객체지향적이다

2) 예외 (NotEnoughStockException.java)

💻 코드

package jpabook.jpashop.domain.exception;

public class NotEnoughStockException extends RuntimeException{
    public NotEnoughStockException() {
        super();
    }

    public NotEnoughStockException(String message) {
        super(message);
    }

    public NotEnoughStockException(String message, Throwable cause) {
        super(message, cause);
    }

    public NotEnoughStockException(Throwable cause) {
        super(cause);
    }
}
profile
Just Do IT ------- 🏃‍♀️

0개의 댓글