getUserData method
Fetches user data and dashboard statistics from Appwrite.
Updates the state with user email and counts for organizations, devices, mothers, and tests.
Implementation
Future<void> getUserData() async {
final userData = prefs.getUser();
if (userData == null) return;
final databases = Databases(client);
final user = await _authService.getCurrentUser();
final isRestricted = userData.role != UserRoles.admin;
List<String> buildQueries(String type) {
final queries = <String>[];
if (type.isNotEmpty) queries.add(Query.equal('type', type));
if (isRestricted) {
queries.add(Query.equal('organizationId', userData.organizationId));
}
return queries;
}
final orgCount = await databases.listDocuments(
databaseId: AppConstants.appwriteDatabaseId,
collectionId: AppConstants.userCollectionId,
queries: buildQueries('organization'),
);
final deviceCount = await databases.listDocuments(
databaseId: AppConstants.appwriteDatabaseId,
collectionId: AppConstants.deviceCollectionId,
);
final motherCount = await databases.listDocuments(
databaseId: AppConstants.appwriteDatabaseId,
collectionId: AppConstants.userCollectionId,
queries: buildQueries('mother'),
);
final testCount = await databases.listDocuments(
databaseId: AppConstants.appwriteDatabaseId,
collectionId: AppConstants.testsCollectionId,
queries:
isRestricted
? [Query.equal('organizationId', userData.organizationId)]
: [],
);
emit(
state.copyWith(
userEmail: user.email,
organizationCount: orgCount.total,
deviceCount: deviceCount.total,
motherCount: motherCount.total,
testCount: testCount.total,
),
);
}