diff --git a/lib/core/interfaces/json_serializable.dart b/lib/core/interfaces/json_serializable.dart index 757d355..f62ea3e 100644 --- a/lib/core/interfaces/json_serializable.dart +++ b/lib/core/interfaces/json_serializable.dart @@ -1 +1,11 @@ -abstract class JsonSerializable {} +import 'package:lifting_progress_tracker/firebase/firestore_json.dart'; + +abstract class JsonSerializable { + // Usage of named constructors can't be enforced, however the usage of + // both methods is heavily encouraged. + JsonSerializable.fromJson(); + + FirestoreJson toJson() { + return {}; + } +} diff --git a/lib/firebase/services/firestore_service.dart b/lib/firebase/services/firestore_service.dart index ec0d58d..4eb2c77 100644 --- a/lib/firebase/services/firestore_service.dart +++ b/lib/firebase/services/firestore_service.dart @@ -1,7 +1,7 @@ import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:get_it/get_it.dart'; +import 'package:lifting_progress_tracker/firebase/firestore_json.dart'; import 'package:lifting_progress_tracker/firebase/services/firebase_service.dart'; -import 'package:lifting_progress_tracker/training_plan/models/training_plan_list.dart'; import 'package:logging/logging.dart'; class FirestoreService { @@ -43,19 +43,12 @@ class FirestoreService { .set(documentData); } - Future get( + Future get( String collectionName, String documentId, ) async { - final DocumentSnapshot documentSnapshot = await _firestore - .collection(collectionName) - .doc(documentId) - .withConverter( - fromFirestore: (snapshot, _) => - TrainingPlanList.fromJson(snapshot.data()!), - toFirestore: (trainingPlanList, _) => trainingPlanList.toJson(), - ) - .get(); + final DocumentSnapshot documentSnapshot = + await _firestore.collection(collectionName).doc(documentId).get(); if (!documentSnapshot.exists) { _logger.severe( diff --git a/lib/pages/home.dart b/lib/pages/home.dart index 8563881..5241bcf 100644 --- a/lib/pages/home.dart +++ b/lib/pages/home.dart @@ -3,49 +3,28 @@ import 'package:get_it/get_it.dart'; import 'package:lifting_progress_tracker/core/models/app_user.dart'; import 'package:lifting_progress_tracker/core/services/user_service.dart'; import 'package:lifting_progress_tracker/core/widgets/error_message.dart'; -import 'package:lifting_progress_tracker/firebase/services/firestore_service.dart'; import 'package:lifting_progress_tracker/pages/starting/widgets/welcome_message.dart'; import 'package:logging/logging.dart'; class HomePage extends StatelessWidget { final Logger _logger = Logger("StartingPage"); + final UserService _userService = GetIt.I.get(); + @override Widget build(BuildContext context) { - final UserService userService = GetIt.I.get(); - final FirestoreService firestoreService = GetIt.I.get(); - return Scaffold( body: Center( child: FutureBuilder( - future: userService.user$, + future: _userService.user$, builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const CircularProgressIndicator(); } if (snapshot.connectionState == ConnectionState.done) { - return Column( - children: [ - WelcomeMessage( - username: snapshot.data?.email ?? "", - ), - ElevatedButton( - onPressed: () => { - firestoreService.get( - "plan-entries", - snapshot.data?.uid ?? "", - ), - // .then( - // (value) { - // final plans = value; - // print(plans); - // }, - // ), - }, - child: const Text("press to fetch!"), - ), - ], + return WelcomeMessage( + username: snapshot.data?.email ?? "", ); } diff --git a/lib/training_plan/models/training_plan.dart b/lib/training_plan/models/training_plan.dart index cff9780..a995de9 100644 --- a/lib/training_plan/models/training_plan.dart +++ b/lib/training_plan/models/training_plan.dart @@ -1,11 +1,10 @@ +import 'package:lifting_progress_tracker/core/interfaces/json_serializable.dart'; import 'package:lifting_progress_tracker/firebase/firestore_json.dart'; import 'package:lifting_progress_tracker/training_plan/models/training_plan_entry.dart'; -class TrainingPlan { +class TrainingPlan implements JsonSerializable { Map planEntries; - TrainingPlan({required this.planEntries}); - TrainingPlan.fromJson(FirestoreJson json) : planEntries = json.map( (key, value) => MapEntry( @@ -13,4 +12,11 @@ class TrainingPlan { TrainingPlanEntry.fromJson(value as FirestoreJson), ), ); + + @override + FirestoreJson toJson() { + return { + "planEntries": planEntries, + }; + } } diff --git a/lib/training_plan/models/training_plan_entry.dart b/lib/training_plan/models/training_plan_entry.dart index bbdaa2a..d8afe46 100644 --- a/lib/training_plan/models/training_plan_entry.dart +++ b/lib/training_plan/models/training_plan_entry.dart @@ -1,21 +1,17 @@ +import 'package:lifting_progress_tracker/core/interfaces/json_serializable.dart'; import 'package:lifting_progress_tracker/firebase/firestore_json.dart'; -class TrainingPlanEntry { +class TrainingPlanEntry implements JsonSerializable { String repeats; String exerciseName; String weight; - TrainingPlanEntry({ - required this.repeats, - required this.exerciseName, - required this.weight, - }); - TrainingPlanEntry.fromJson(FirestoreJson json) : repeats = json["repeats"] as String, exerciseName = json["exerciseName"] as String, weight = json["weight"] as String; + @override FirestoreJson toJson() { return { "repeats": repeats, diff --git a/lib/training_plan/models/training_plan_list.dart b/lib/training_plan/models/training_plan_list.dart index 84e01e2..e727349 100644 --- a/lib/training_plan/models/training_plan_list.dart +++ b/lib/training_plan/models/training_plan_list.dart @@ -1,10 +1,11 @@ +import 'package:lifting_progress_tracker/core/interfaces/json_serializable.dart'; import 'package:lifting_progress_tracker/firebase/firestore_json.dart'; import 'package:lifting_progress_tracker/training_plan/models/training_plan.dart'; -class TrainingPlanList { +class TrainingPlanList implements JsonSerializable { Map trainingPlanList; - TrainingPlanList({required this.trainingPlanList}); + TrainingPlanList(this.trainingPlanList); TrainingPlanList.fromJson(FirestoreJson json) : trainingPlanList = json.map( @@ -14,6 +15,7 @@ class TrainingPlanList { ), ); + @override FirestoreJson toJson() { return { "trainingPlanList": trainingPlanList, diff --git a/lib/training_plan/training_plan_service.ts.dart b/lib/training_plan/training_plan_service.ts.dart new file mode 100644 index 0000000..4dfedc8 --- /dev/null +++ b/lib/training_plan/training_plan_service.ts.dart @@ -0,0 +1,16 @@ +import 'package:get_it/get_it.dart'; +import 'package:lifting_progress_tracker/firebase/services/firestore_service.dart'; +import 'package:lifting_progress_tracker/training_plan/models/training_plan_list.dart'; + +class TrainingPlanService { + final FirestoreService _firestoreService = GetIt.I.get(); + + Future getPlanList( + String collectionName, + String documentId, + ) async { + return TrainingPlanList.fromJson( + await _firestoreService.get(collectionName, documentId), + ); + } +}