diff --git a/lib/pangea/activity_planner/activity_plan_model.dart b/lib/pangea/activity_planner/activity_plan_model.dart index 36597339d..20c87843b 100644 --- a/lib/pangea/activity_planner/activity_plan_model.dart +++ b/lib/pangea/activity_planner/activity_plan_model.dart @@ -1,7 +1,6 @@ -import 'package:flutter/foundation.dart'; - import 'package:fluffychat/pangea/activity_planner/activity_plan_request.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:flutter/foundation.dart'; class ActivityPlanModel { final String bookmarkId; @@ -13,6 +12,7 @@ class ActivityPlanModel { final String? imageURL; final DateTime? endAt; final Duration? duration; + final List roles; ActivityPlanModel({ required this.req, @@ -20,6 +20,7 @@ class ActivityPlanModel { required this.learningObjective, required this.instructions, required this.vocab, + required this.roles, this.imageURL, this.endAt, this.duration, @@ -34,6 +35,7 @@ class ActivityPlanModel { String? imageURL, DateTime? endAt, Duration? duration, + List? roles, }) { return ActivityPlanModel( req: req, @@ -44,14 +46,18 @@ class ActivityPlanModel { imageURL: imageURL ?? this.imageURL, endAt: endAt ?? this.endAt, duration: duration ?? this.duration, + roles: roles ?? this.roles, ); } factory ActivityPlanModel.fromJson(Map json) { + final req = + ActivityPlanRequest.fromJson(json[ModelKey.activityPlanRequest]); + return ActivityPlanModel( imageURL: json[ModelKey.activityPlanImageURL], instructions: json[ModelKey.activityPlanInstructions], - req: ActivityPlanRequest.fromJson(json[ModelKey.activityPlanRequest]), + req: req, title: json[ModelKey.activityPlanTitle], learningObjective: json[ModelKey.activityPlanLearningObjective], vocab: List.from( @@ -67,6 +73,15 @@ class ActivityPlanModel { minutes: json[ModelKey.activityPlanDuration]['minutes'] ?? 0, ) : null, + roles: List.from( + json['roles']?.map((role) => Role.fromJson(role)) ?? + req.numberOfParticipants > 1 + ? List.generate( + req.numberOfParticipants, + (index) => Role(name: 'Participant'), + ) + : [Role(name: 'Participant')], + ), ); } @@ -85,6 +100,7 @@ class ActivityPlanModel { 'hours': duration?.inHours.remainder(24) ?? 0, 'minutes': duration?.inMinutes.remainder(60) ?? 0, }, + 'roles': roles.map((role) => role.toJson()).toList(), }; } @@ -162,3 +178,23 @@ class Vocab { @override int get hashCode => lemma.hashCode ^ pos.hashCode; } + +class Role { + final String name; + + Role({ + required this.name, + }); + + factory Role.fromJson(Map json) { + return Role( + name: json['name'], + ); + } + + Map toJson() { + return { + 'name': name, + }; + } +}