package services;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import exception.ProductNotFoundException;
import play.Logger;
import play.db.jpa.JPA;
import models.Product;
import tools.web.Pager;
public class ProductService {
public List<Product> getAll(Pager pager) {
Query query = JPA.em().createQuery("SELECT p FROM Product p") ;
if (pager.applyLimit()) {
query.setFirstResult(pager.getSqlStart());
query.setMaxResults(pager.getSqlLimit());
}
return query.getResultList();
}
public Product getById(int productId) throws ProductNotFoundException {
Query query = JPA.em().createQuery("SELECT p FROM Product p WHERE p.id = :id");
query.setParameter("id", productId);
Product product = (Product) query.getSingleResult();
if (product == null) {
throw new ProductNotFoundException("Product was not found with given id ("+productId+")");
}
Logger.debug("Product from ProductService is "+product);
return product;
}
public List<Product> getByCategory(int categoryId, Pager pager) {
Query query = JPA.em().createQuery("SELECT p FROM Product p WHERE p.category.id = :id");
query.setParameter("id", categoryId);
if (pager.applyLimit()) {
query.setFirstResult(pager.getSqlStart());
query.setMaxResults(pager.getSqlLimit());
}
return query.getResultList();
}
public boolean isInStock(int productId) {
Query query = JPA.em().createQuery("SELECT p FROM Product p WHERE p.id = :productId AND p.inStock = :inStock");
query.setParameter("productId", productId);
query.setParameter("inStock", Product.IN_STOCK);
Product product = (Product) query.getSingleResult();
return product != null;
}
}