diff --git a/lib/models/session.dart b/lib/models/session.dart index 45b7d0d..fc9272c 100644 --- a/lib/models/session.dart +++ b/lib/models/session.dart @@ -1,4 +1,9 @@ +import 'package:json_annotation/json_annotation.dart'; + +part 'session.g.dart'; + /// Represents the metadata for data collection session. +@JsonSerializable() class Session { /// Unique identifier for the participant final String participantID; @@ -24,4 +29,9 @@ class Session { return "Session(participantID: $participantID, sessionID: $sessionID, " "startTime: $startTime, endTime: $endTime)"; } + + /// Convert the [Session] object to its json representation. + /// This method is particularly useful when uploading data to Firebase and + /// similar no-sql dbs. + Map toJson() => _$SessionToJson(this); } diff --git a/lib/models/session.g.dart b/lib/models/session.g.dart new file mode 100644 index 0000000..71dd51e --- /dev/null +++ b/lib/models/session.g.dart @@ -0,0 +1,21 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'session.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +Session _$SessionFromJson(Map json) => Session( + participantID: json['participantID'] as String, + sessionID: json['sessionID'] as String, + startTime: DateTime.parse(json['startTime'] as String), + endTime: DateTime.parse(json['endTime'] as String), + ); + +Map _$SessionToJson(Session instance) => { + 'participantID': instance.participantID, + 'sessionID': instance.sessionID, + 'startTime': instance.startTime.toIso8601String(), + 'endTime': instance.endTime.toIso8601String(), + }; diff --git a/test/models/session_test.dart b/test/models/session_test.dart index f872df4..5eac78c 100644 --- a/test/models/session_test.dart +++ b/test/models/session_test.dart @@ -15,4 +15,20 @@ void main() { "endTime: ${session.endTime})"; expect(session.toString(), strRep); }); + + test( + "Session.toJson() returns a valid json representation", + () { + final Session session = Session( + participantID: '101', + sessionID: '001', + startTime: DateTime.now(), + endTime: DateTime.now(), + ); + + final Map sessionJson = session.toJson(); + + expect(sessionJson, isMap); + }, + ); }