Item.java
// ====비즈니스 로직====
// 재고 증가
public void addStock(int quantity) {
this.stockQuantity += quantity;
}
// 재고 감소
public void remove(int quantity) {
int restStock = this.stockQuantity - quantity;
if (restStock < 0) {
throw new NotEnoughStockException("need more stock");
}
this.stockQuantity = restStock;
}
ItemRepository.java
package sorzzzzy.dearmydog.repository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import sorzzzzy.dearmydog.domain.Item.Item;
import javax.persistence.EntityManager;
import java.util.List;
@Repository
@RequiredArgsConstructor
public class ItemRepository {
private final EntityManager em;
public void save(Item item) {
// 아이템을 처음 저장할 때는 id가 없기 때문
if (item.getId() == null) {
em.persist(item);
} else {
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.java
package sorzzzzy.dearmydog.service;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import sorzzzzy.dearmydog.domain.Item.Item;
import sorzzzzy.dearmydog.repository.ItemRepository;
import java.util.List;
@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);
}
}
전체적으로 로직이 회원 도메인과 매우 비슷한 걸 볼 수 있다!
이제 추가로 제일 중요한 주문 도메인을 개발해보겠다!