myCurriculumDomains function
Domains the user has personal access to: owned + shared + assigned (via curriculum_assignments). Does NOT include public-visibility domains the user hasn't engaged with. Used by progress-focused screens (home card, progress dashboard, domain browse) so "no curriculum" means "no domains shown".
Implementation
@riverpod
Future<List<DomainEntity>> myCurriculumDomains(Ref ref) async {
final results = await Future.wait([
ref.watch(myDomainsProvider.future),
ref.watch(sharedWithMeProvider.future),
ref.watch(myAssignmentsProvider.future),
]);
final owned = results[0] as List<DomainEntity>;
final shared = results[1] as List<DomainEntity>;
final assignments = results[2] as List<CurriculumAssignment>;
final byId = <String, DomainEntity>{};
for (final d in [...owned, ...shared]) {
byId[d.id] = d;
}
final missing = assignments
.map((a) => a.domainId)
.where((id) => !byId.containsKey(id))
.toSet();
if (missing.isNotEmpty) {
final ds = ref.watch(supabaseDatasourceProvider);
final resolved = await ds.getDomainsByIds(missing);
for (final d in resolved.map((m) => m.toEntity())) {
byId[d.id] = d;
}
}
final list = byId.values.toList()
..sort((a, b) {
final c = a.sortOrder.compareTo(b.sortOrder);
return c != 0 ? c : a.name.compareTo(b.name);
});
return list;
}