getPatient method Null safety
Retrieves a patient instance either by its Firebase uid or instance ID. Returns null if patient does not exist or an error occurred. Throws an exception if an error occurred.
Implementation
Future<Patient?> getPatient({String? firebaseUid, String? patientId}) async {
if (firebaseUid == null && patientId == null) {
return null;
}
late String gqlQueryString;
if (firebaseUid != null) {
gqlQueryString = '''
query RetrievePatient {
patients(
where: {
user: {
firebaseUid: "$firebaseUid"
}
}
) {
${PatientGqlEntity.gqlQueryFragment}
}
}
''';
} else {
gqlQueryString = '''
query RetrievePatient {
patients(
where: {
id: "$patientId"
}
) {
${PatientGqlEntity.gqlQueryFragment}
}
}
''';
}
try {
final queryResult = await graphQLClient.query<void>(QueryOptions(
document: gql(gqlQueryString),
fetchPolicy: FetchPolicy.networkOnly,
));
if (queryResult.hasException) {
logger?.e(queryResult.exception.toString());
throw queryResult.exception!;
}
final data = queryResult.data!['patients'] as List<dynamic>;
if (data.isNotEmpty) {
// merge in all properties from the base user entity
final patientData = data.first as Map<String, dynamic>;
final patientGqlFragment = PatientGqlEntity.fromJson(patientData);
if (patientGqlFragment != null) {
return patientGqlFragment.toPatient();
}
}
return null;
} catch (e, stackTrace) {
logger?.e(
'Could not retrieve patient instance from backend', e, stackTrace);
rethrow;
}
}