WEB JAVA SPRING/PROJECT

[Day-8] 상품 엔티티, 리파지토리, 서비스

sshhhh 2023. 8. 25. 16:10

<상품 도메인 개발>

구현 기능 

- 상품 등록

- 상품 목록 조회

- 상품 수정

#파일구조

 


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

domain -> Item

//비즈니스 로직

/*
재고 증가
 */
public void addStock(int quantity){
    this.stockQuantity+=quantity;
}

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

 

NotEnoughStockException

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);
    }


}
 
 

#상품 리파지토리 개발

itemRepository

@Repository
@RequiredArgsConstructor
public class ItemRepository {

    private final EntityManager em;

    //item은 jpa에 저장하기 전까지 id값이 없다(=완전히 새로 생성하는 객체)
    public void save(Item item) {
        if ((item.getId() == null)) {
            em.persist(item); //상품 신규 등록
        } else { //만약에 db에 이미 있는 값이라면 수정
            em.merge(item);
        }
    }

    public Item findOne(Long id) {
        return em.find(Item.class, id);
    }

    public List<Item> findAll() {
        return em.createQuery("select i from Item i",Item.class).getResultList();
    }

}
 
 
 

#상품 서비스 개발 

itemService

상품 리포지토리에 단순히 위임만 하는 클래스

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class itemService {

    private final ItemRepository itemRepository;

    @Transactional
    public void saveItem(Item item) {
        itemRepository.save(item);
    }

    public List<Item> findItems() {
        return itemRepository.findAll();
    }

    public Item findOne(Long itemId) {
        return itemRepository.findOne(itemId);
    }
}