package io.oasp.gastronomy.restaurant.salesmanagement.logic.impl.usecase; import io.oasp.gastronomy.restaurant.general.common.api.constants.PermissionConstants; import io.oasp.gastronomy.restaurant.general.logic.api.UseCase; import io.oasp.gastronomy.restaurant.salesmanagement.dataaccess.api.OrderEntity; import io.oasp.gastronomy.restaurant.salesmanagement.logic.api.Salesmanagement; import io.oasp.gastronomy.restaurant.salesmanagement.logic.api.to.OrderCto; import io.oasp.gastronomy.restaurant.salesmanagement.logic.api.to.OrderEto; import io.oasp.gastronomy.restaurant.salesmanagement.logic.api.to.OrderPositionEto; import io.oasp.gastronomy.restaurant.salesmanagement.logic.api.to.OrderSearchCriteriaTo; import io.oasp.gastronomy.restaurant.salesmanagement.logic.api.usecase.UcFindOrder; import io.oasp.gastronomy.restaurant.salesmanagement.logic.base.usecase.AbstractOrderUc; import io.oasp.module.jpa.common.api.to.PaginatedListTo; import java.util.ArrayList; import java.util.List; import javax.annotation.security.RolesAllowed; import javax.inject.Inject; import javax.inject.Named; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Use Case to find an order. * */ @Named @UseCase public class UcFindOrderImpl extends AbstractOrderUc implements UcFindOrder { private static final Logger LOG = LoggerFactory.getLogger(UcFindOrderImpl.class); private Salesmanagement salesManagement; @Override @RolesAllowed(PermissionConstants.FIND_ORDER) public OrderEto findOrder(long orderId) { LOG.debug("Get order."); return getBeanMapper().map(getOrderDao().findOne(orderId), OrderEto.class); } @Override @RolesAllowed(PermissionConstants.FIND_ORDER) public PaginatedListTo<OrderEto> findOrderEtos(OrderSearchCriteriaTo criteria) { criteria.limitMaximumPageSize(MAXIMUM_HIT_LIMIT); PaginatedListTo<OrderEntity> orders = getOrderDao().findOrders(criteria); return mapPaginatedEntityList(orders, OrderEto.class); } @Override @RolesAllowed(PermissionConstants.FIND_ORDER) public PaginatedListTo<OrderCto> findOrderCtos(OrderSearchCriteriaTo criteria) { PaginatedListTo<OrderEto> orderEtos = findOrderEtos(criteria); List<OrderCto> page = new ArrayList<>(orderEtos.getResult().size()); for (OrderEto order : orderEtos.getResult()) { // REVIEW <who> (hohwille) N+1 problem. Find a better and more efficient way to load the order positions. page.add(findOrderCto(order)); } PaginatedListTo<OrderCto> result = new PaginatedListTo<>(page, orderEtos.getPagination()); return result; } @Override @RolesAllowed(PermissionConstants.FIND_ORDER) public OrderCto findOrderCto(OrderEto order) { OrderCto result = new OrderCto(); result.setOrder(order); List<OrderPositionEto> positions = this.salesManagement.findOrderPositionsByOrderId(order.getId()); result.setPositions(positions); return result; } @Override @RolesAllowed(PermissionConstants.FIND_ORDER) public OrderEto findOpenOrderForTable(long tableId) { OrderEntity order = getOrderDao().findOpenOrderByTable(tableId); return getBeanMapper().map(order, OrderEto.class); } /** * @param salesManagement the {@link Salesmanagement} to {@link Inject}. */ @Inject public void setSalesManagement(Salesmanagement salesManagement) { this.salesManagement = salesManagement; } }