getMoodEntries method Null safety
Retrieves a list of MoodEntry records from the backend. startDate and
endDate are optional. If only one is given, the method will retrieve at
most 30 days from the given date. If user is specified, entries for that
user will be returned. By default the backend will return data for the
currently logged in user.
Implementation
Future<BuiltList<MoodEntry>> getMoodEntries(
{Instant? startDate,
Instant? endDate,
User? user,
int limit = 1000}) async {
// set date window if unbounded
if (startDate == null && endDate != null) {
startDate = endDate - Time.oneDay * 30;
} else if (startDate != null && endDate == null) {
endDate = startDate + Time.oneDay * 30;
}
final userIdFilter = user != null ? 'user: "${user.userId}"' : '';
final startDateFilter = startDate != null
? 'dateTime_gte: "${InstantPattern.general.format(startDate)}"'
: '';
final endDateFilter = endDate != null
? 'dateTime_lte: "${InstantPattern.general.format(endDate)}"'
: '';
// construct query
final gqlQueryString = '''
query FetchMoodEntries {
moodEntries(
sort: "dateTime:desc"
limit: $limit
where: {
$userIdFilter
$startDateFilter
$endDateFilter
}
) {
${MoodEntryGqlEntity.gqlQueryFragment}
}
}
''';
try {
final queryResult = await graphQLClient.query<void>(QueryOptions(
document: gql(gqlQueryString),
fetchPolicy: FetchPolicy.networkOnly,
));
if (queryResult.hasException) {
logger?.e(queryResult.exception.toString());
return BuiltList<MoodEntry>();
}
final data = queryResult.data!['moodEntries'] as List<dynamic>;
final l = data
.map((dynamic e) =>
MoodEntryGqlEntity.fromJson(e as Map<String, dynamic>))
.where((element) => element != null)
.map((e) => e!.toMoodEntry())
.toBuiltList();
if (!_lastUpdatedMoodStreamController.isClosed) {
_lastUpdatedMoodStreamController
.add(l.map((p0) => EntityCreated(p0)).toBuiltList());
}
return l;
} catch (e, stackTrace) {
logger?.e('Could not get list of mood entries', e.toString(), stackTrace);
return BuiltList<MoodEntry>();
}
}