/*
* Copyright (c) 2012, Mayocat <hello@mayocat.org>
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package mayoapp.dao;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import org.mayocat.shop.billing.model.Order;
import org.mayocat.shop.billing.model.OrderItem;
import org.mayocat.shop.billing.store.jdbi.argument.CurrencyAsCurrencyCodeArgumentFactory;
import org.mayocat.shop.billing.store.jdbi.argument.OrderStatusArgumentFactory;
import org.mayocat.shop.billing.store.jdbi.mapper.OrderMapper;
import org.mayocat.store.rdbms.dbi.argument.DateAsTimestampArgumentFactory;
import org.mayocat.store.rdbms.dbi.argument.MapAsJsonStringArgumentFactory;
import org.skife.jdbi.v2.sqlobject.Bind;
import org.skife.jdbi.v2.sqlobject.BindBean;
import org.skife.jdbi.v2.sqlobject.SqlBatch;
import org.skife.jdbi.v2.sqlobject.SqlQuery;
import org.skife.jdbi.v2.sqlobject.SqlUpdate;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterArgumentFactory;
import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
import org.skife.jdbi.v2.sqlobject.mixins.Transactional;
import org.skife.jdbi.v2.sqlobject.stringtemplate.UseStringTemplate3StatementLocator;
/**
* @version $Id: 3f02aa443d4394d2e78cbd1259f131cee5eed716 $
*/
@RegisterMapper(OrderMapper.class)
@RegisterArgumentFactory({ DateAsTimestampArgumentFactory.class, CurrencyAsCurrencyCodeArgumentFactory.class,
OrderStatusArgumentFactory.class, MapAsJsonStringArgumentFactory.class })
@UseStringTemplate3StatementLocator
public abstract class OrderDAO implements EntityDAO<Order>, Transactional<OrderDAO>
{
@SqlUpdate
public abstract void createOrder(@BindBean("order") Order order);
@SqlBatch
public abstract void insertOrderItems(@BindBean("orderItem") List<OrderItem> orderItem);
@SqlUpdate
public abstract Integer updateOrder(@BindBean("order") Order order);
@SqlQuery
public abstract List<Order> findAllPaidOrAwaitingPayment(@Bind("number") Integer number,
@Bind("offset") Integer offset, @Bind("tenantId") UUID tenant);
@SqlQuery
public abstract Integer countAllPaidOrAwaitingPayment(@Bind("tenantId") UUID tenant);
@SqlQuery
public abstract Order findBySlugWithCustomer(@Bind("slug") String slug, @Bind("tenantId") UUID tenant);
@SqlQuery
public abstract Order findByIdWithCustomer(@Bind("id") UUID id);
@SqlQuery
public abstract Integer lastOrderNumber(@Bind("tenantId") UUID tenant);
@SqlQuery
public abstract List<Order> findAllPaidForCustomer(@Bind("customerId") UUID customerId);
@SqlQuery
public abstract List<Order> findAllPaidForCustomerPaginated(@Bind("customerId") UUID customerId,
@Bind("number") Integer number,
@Bind("offset") Integer offset);
@SqlQuery
public abstract Integer countAllPaidForCustomer(@Bind("customerId") UUID customerId);
@SqlQuery
public abstract List<Order> findAllPaidBetween(@Bind("date1") Date date1, @Bind("date2") Date date2);
}