whereDate function
CoffeeQueryFilter
whereDate(
- dynamic type,
- WhereOperator operator,
- DateTime date, {
- String filterBy = 'full-date',
Creates a filter for date searches.
type
: The property to filter by, either a String or a Function.
operator
: The comparison operator to use ('==', '!=', '<=', '<', '>=', '>').
date
: The date value to compare.
filterBy
: Specifies the components of the date to filter by ('day', 'month', 'year', 'day-month', 'day-year', 'month-year', 'day-month-year', 'full-date'). Default is 'full-date'.
Returns a CoffeeQueryFilter configured for date searches.
Usage Example
whereDate('createdAt', WhereOperator.equal, DateTime.now(), 'day');
whereDate((Model model) => model.createdAt, WhereOperator.equal, DateTime(2022, 10, 27), 'day');
Implementation
CoffeeQueryFilter whereDate(dynamic type, WhereOperator operator, DateTime date, {
String filterBy = 'full-date'
}) {
final propertyName = _getPropertyName(type);
// Format the date components
final day = date.day.toString().padLeft(2, '0');
final month = date.month.toString().padLeft(2, '0');
final year = date.year.toString();
final hours = date.hour.toString().padLeft(2, '0');
final minutes = date.minute.toString().padLeft(2, '0');
final seconds = date.second.toString().padLeft(2, '0');
final fullDate = '$year-$month-$day $hours:$minutes:$seconds';
// Add operator prefix
String operatorPrefix;
switch (operator) {
case WhereOperator.equal:
operatorPrefix = 'cEqualDate';
break;
case WhereOperator.notEqual:
operatorPrefix = 'cNotEqualDate';
break;
case WhereOperator.greaterOrEqual:
operatorPrefix = 'cGreaterEqualDate';
break;
case WhereOperator.lessOrEqual:
operatorPrefix = 'cLessEqualDate';
break;
case WhereOperator.greater:
operatorPrefix = 'cGreaterDate';
break;
case WhereOperator.less:
operatorPrefix = 'cLessDate';
break;
default:
throw ArgumentError('Invalid operator');
}
String expression;
switch (filterBy) {
case 'day':
expression = '$operatorPrefix$propertyName=day=$day';
break;
case 'month':
expression = '$operatorPrefix$propertyName=month=$month';
break;
case 'year':
expression = '$operatorPrefix$propertyName=year=$year';
break;
case 'day-month':
expression = '$operatorPrefix$propertyName=day=$day,$operatorPrefix$propertyName=month=$month';
break;
case 'day-year':
expression = '$operatorPrefix$propertyName=day=$day,$operatorPrefix$propertyName=year=$year';
break;
case 'month-year':
expression = '$operatorPrefix$propertyName=month=$month,$operatorPrefix$propertyName=year=$year';
break;
case 'day-month-year':
expression = '$operatorPrefix$propertyName=day=$day,$operatorPrefix$propertyName=month=$month,$operatorPrefix$propertyName=year=$year';
break;
case 'full-date':
expression = '$operatorPrefix$propertyName=full-date=$fullDate';
break;
default:
throw ArgumentError('Invalid filterBy value');
}
return CoffeeQueryFilter(
expression: expression,
type: 'filter',
);
}