OrderReader.java
package hello.commerce.order;
import hello.commerce.common.exception.BusinessException;
import hello.commerce.common.exception.ErrorCode;
import hello.commerce.order.model.Order;
import lombok.RequiredArgsConstructor;
import org.hibernate.PessimisticLockException;
import org.hibernate.exception.LockTimeoutException;
import org.springframework.stereotype.Component;
@Component
@RequiredArgsConstructor
public class OrderReader {
private final OrderRepository orderRepository;
public Order findByIdForUpdate(Long orderId) {
try {
return orderRepository.findByIdForUpdate(orderId)
.orElseThrow(() -> new BusinessException(ErrorCode.NOT_FOUND_ORDER));
} catch (PessimisticLockException | LockTimeoutException e) {
throw new BusinessException(ErrorCode.LOCK_TIMEOUT_ORDER);
}
}
}