increment method
FirestoreDynamicDocumentModel
increment(
- String key,
- num value, {
- List<
CounterUpdaterInterval> intervals = const [],
The value of key
can be increased (or decreased by minus) by value
.
It is possible to increase within a period of time with intervals
.
When creating monthly rankings, etc., specify intervals
.
Execute save to apply the changes.
Implementation
FirestoreDynamicDocumentModel increment(
String key,
num value, {
List<CounterUpdaterInterval> intervals = const [],
}) {
this[key] = FieldValue.increment(value);
if (intervals.isEmpty) {
return this;
}
final now = DateTime.now();
for (final interval in intervals) {
switch (interval) {
case CounterUpdaterInterval.daily:
this[dailyKey(key, now)] = FieldValue.increment(value);
for (var i = 0; i < 30; i++) {
this[dailyKey(
key,
DateTime(now.year, now.month, now.day - 60 + i),
)] = FieldValue.delete();
}
break;
case CounterUpdaterInterval.monthly:
this[monthlyKey(key, now)] = FieldValue.increment(value);
for (var i = 0; i < 12; i++) {
this[monthlyKey(
key,
DateTime(now.year, now.month - 24 + i),
)] = FieldValue.delete();
}
break;
case CounterUpdaterInterval.yearly:
this[yearlyKey(key, now)] = FieldValue.increment(value);
for (var i = 0; i < 5; i++) {
this[yearlyKey(key, DateTime(now.year, now.month - 10 + i))] =
FieldValue.delete();
}
break;
case CounterUpdaterInterval.weekly:
this[weeklyKey(key, now)] = FieldValue.increment(value);
for (var i = 0; i < 4; i++) {
this[weeklyKey(
key,
DateTime(now.year, now.month, now.day - ((8 - i) * 7)),
)] = FieldValue.delete();
}
break;
}
}
return this;
}