Add shortcut for date aggregation operators working with timezone.

See: #3713
Original pull request: #3748.
This commit is contained in:
Christoph Strobl
2021-07-26 09:18:16 +02:00
committed by Mark Paluch
parent fc41793d5d
commit 456c1ad26a
2 changed files with 29 additions and 3 deletions

View File

@@ -46,6 +46,19 @@ public class DateOperators {
return new DateOperatorFactory(fieldReference);
}
/**
* Take the date referenced by given {@literal fieldReference}.
*
* @param fieldReference must not be {@literal null}.
* @return new instance of {@link DateOperatorFactory}.
* @since 3.3
*/
public static DateOperatorFactory zonedDateOf(String fieldReference, Timezone timezone) {
Assert.notNull(fieldReference, "FieldReference must not be null!");
return new DateOperatorFactory(fieldReference).withTimezone(timezone);
}
/**
* Take the date resulting from the given {@link AggregationExpression}.
*
@@ -58,6 +71,19 @@ public class DateOperators {
return new DateOperatorFactory(expression);
}
/**
* Take the date resulting from the given {@link AggregationExpression}.
*
* @param expression must not be {@literal null}.
* @return new instance of {@link DateOperatorFactory}.
* @since 3.3
*/
public static DateOperatorFactory zonedDateOf(AggregationExpression expression, Timezone timezone) {
Assert.notNull(expression, "Expression must not be null!");
return new DateOperatorFactory(expression).withTimezone(timezone);
}
/**
* Take the given value as date.
* <p/>

View File

@@ -35,8 +35,8 @@ class DateOperatorsUnitTests {
@Test // GH-3713
void rendersDateAddWithTimezone() {
assertThat(DateOperators.dateOf("purchaseDate").withTimezone(Timezone.valueOf("America/Chicago")).add(3, "day")
assertThat(DateOperators.zonedDateOf("purchaseDate", Timezone.valueOf("America/Chicago")).add(3, "day")
.toDocument(Aggregation.DEFAULT_CONTEXT)).isEqualTo(Document.parse(
"{ $dateAdd: { startDate: \"$purchaseDate\", unit: \"day\", amount: 3, timezone : \"America/Chicago\" } }"));
}
@@ -53,7 +53,7 @@ class DateOperatorsUnitTests {
@Test // GH-3713
void rendersDateDiffWithTimezone() {
assertThat(DateOperators.dateOf("purchaseDate").withTimezone(Timezone.valueOf("America/Chicago"))
assertThat(DateOperators.zonedDateOf("purchaseDate", Timezone.valueOf("America/Chicago"))
.diffValueOf("delivered", "day").toDocument(Aggregation.DEFAULT_CONTEXT)).isEqualTo(Document.parse(
"{ $dateDiff: { startDate: \"$purchaseDate\", endDate: \"$delivered\", unit: \"day\", timezone : \"America/Chicago\" } }"));
}