fluffychat/lib/pangea/course_plans/course_user_event.dart
ggurdin 1b353afbac
feat: integrate room preview endpoint (#4014)
* feat: integrate room preview endpoint

* initial work for intermediary activity page

* Update lib/pangea/activity_sessions/activity_session_start/activity_session_start_page.dart

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update lib/pangea/activity_sessions/activity_session_start/activity_session_start_page.dart

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update lib/pangea/chat_settings/utils/room_summary_extension.dart

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* formatting

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-09-19 09:55:13 -04:00

50 lines
1.2 KiB
Dart

class CourseUserState {
final String userID;
// Map of activityIds to list of roomIds
final Map<String, List<String>> _completedActivities;
CourseUserState({
required this.userID,
required Map<String, List<String>> completedActivities,
}) : _completedActivities = completedActivities;
void completeActivity(
String activityID,
String roomID,
) {
_completedActivities[activityID] ??= [];
_completedActivities[activityID]!.add(roomID);
}
Set<String> get completedActivities => _completedActivities.keys.toSet();
bool hasCompletedActivity(
String activityID,
) {
return _completedActivities.containsKey(activityID);
}
factory CourseUserState.fromJson(Map<String, dynamic> json) {
final activityEntry = json['comp_act_by_topic'];
final Map<String, List<String>> activityMap = {};
if (activityEntry != null) {
activityEntry.forEach((key, value) {
activityMap[key] = List<String>.from(value);
});
}
return CourseUserState(
userID: json['user_id'],
completedActivities: activityMap,
);
}
Map<String, dynamic> toJson() {
return {
'user_id': userID,
'comp_act_by_topic': _completedActivities,
};
}
}