package be.swsb.fiazard.ordering.preparation;
import static be.swsb.fiazard.ordering.preparation.OrderItemToBePreparedViewModel.ORDER_ITEM_TO_BEPREPARED_COLLECTION_NAME;
import java.time.LocalDateTime;
import java.util.List;
import java.util.function.BiFunction;
import org.mongojack.DBCursor;
import org.mongojack.JacksonDBCollection;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import com.mongodb.DB;
public class OrderItemToBePreparedViewModelDAO {
private DB db;
private ObjectMapper objectMapper;
public OrderItemToBePreparedViewModelDAO(DB db, ObjectMapper objectMapper) {
this.db = db;
this.objectMapper = objectMapper;
}
public List<OrderItemToBePreparedViewModel> find(LocalDateTime dateFrom, LocalDateTime dateUntil) {
DBCursor<OrderItemToBePreparedViewModel> cursor = collection().find();
where("deliveryDateTime", cursor::greaterThanEquals, dateFrom);
where("deliveryDateTime", cursor::lessThanEquals, dateUntil);
return Lists.newArrayList(cursor.iterator());
}
private void where(String fieldName, BiFunction<String, Object, DBCursor<OrderItemToBePreparedViewModel>> function, Object objectToBeUsedForFiltering) {
if (objectToBeUsedForFiltering == null) {
return;
}
function.apply(fieldName, objectToBeUsedForFiltering);
}
private JacksonDBCollection<OrderItemToBePreparedViewModel, String> collection() {
return JacksonDBCollection.wrap(db.getCollection(ORDER_ITEM_TO_BEPREPARED_COLLECTION_NAME), OrderItemToBePreparedViewModel.class, String.class, objectMapper);
}
}