From b86d88785ce86d58c20a213993d732ef008a397d Mon Sep 17 00:00:00 2001 From: AYM1607 Date: Sat, 23 Feb 2019 19:12:24 -0600 Subject: [PATCH] Added the remaining CRUD operations for events --- lib/src/App.dart | 42 ++++++++----- lib/src/models/event_model.dart | 13 ++++ lib/src/resources/firestore_provider.dart | 73 ++++++++++++++++++++++- 3 files changed, 112 insertions(+), 16 deletions(-) diff --git a/lib/src/App.dart b/lib/src/App.dart index 6e40880..47df073 100644 --- a/lib/src/App.dart +++ b/lib/src/App.dart @@ -5,7 +5,7 @@ import './models/task_model.dart'; import './models/user_model.dart'; import './resources/firestore_provider.dart'; -/* class App extends StatelessWidget { +class App extends StatelessWidget { Widget build(BuildContext context) { final fire = FirestoreProvider(); return MaterialApp( @@ -19,9 +19,9 @@ import './resources/firestore_provider.dart'; ), ); } -} */ +} -class App extends StatelessWidget { +/* class App extends StatelessWidget { Widget build(BuildContext context) { final fire = FirestoreProvider(); return MaterialApp( @@ -32,9 +32,9 @@ class App extends StatelessWidget { title: Text('DO>'), ), body: StreamBuilder( - stream: fire.getUserEvents('vBOvtmTeC8iPg8L4Hixh'), - builder: (BuildContext context, - AsyncSnapshot> userSnapshot) { + stream: fire.getEvent('vBOvtmTeC8iPg8L4Hixh', '-LZReccofbHpw9UfOTMk'), + builder: + (BuildContext context, AsyncSnapshot userSnapshot) { if (!userSnapshot.hasData) { return Center( child: CircularProgressIndicator(), @@ -51,11 +51,21 @@ class App extends StatelessWidget { event: 'Math', ); - fire.updateTask( - '-LZRNhS9mX-SO0XgfQIM', - done: true, - text: 'Hellloooooo', - priority: 1, + final event = EventModel( + name: 'Langs and trans', + tasks: [], + highPriority: 0, + mediumPriority: 0, + lowPriority: 0, + media: [], + when: [], + pendigTasks: 0, + ); + + fire.updateEvent( + 'vBOvtmTeC8iPg8L4Hixh', + '-LZReccofbHpw9UfOTMk', + name: 'kjhahslkdjhf', ); }, child: Text('Add task'), @@ -63,9 +73,11 @@ class App extends StatelessWidget { ]; //children.add(Text(userSnapshot.data.text)); - userSnapshot.data.forEach((EventModel task) { - children.add(Text(task.name)); - }); + //userSnapshot.data.forEach((EventModel task) { + // children.add(Text(task.name)); + //}); + + children.add(Text(userSnapshot.data.name)); return Column( children: children, @@ -75,4 +87,4 @@ class App extends StatelessWidget { ), ); } -} +} */ diff --git a/lib/src/models/event_model.dart b/lib/src/models/event_model.dart index 214d635..0442e9e 100644 --- a/lib/src/models/event_model.dart +++ b/lib/src/models/event_model.dart @@ -33,4 +33,17 @@ class EventModel { highPriority = firestoreMap["highPriority"], mediumPriority = firestoreMap["mediumPriority"], lowPriority = firestoreMap["lowPriority"]; + + Map toFirestoreMap() { + return { + "name": name, + "pendingTasks": pendigTasks, + "when": when, + "media": media, + "tasks": tasks, + "highPriority": highPriority, + "mediumPriority": mediumPriority, + "lowPriority": lowPriority, + }; + } } diff --git a/lib/src/resources/firestore_provider.dart b/lib/src/resources/firestore_provider.dart index 90f5313..e90a2ee 100644 --- a/lib/src/resources/firestore_provider.dart +++ b/lib/src/resources/firestore_provider.dart @@ -136,8 +136,79 @@ class FirestoreProvider { } //-----------------------Event related operations----------------------------- + // TODO: Change the Events collection name to 'events' in forestore. - // TODO: Change the Events collction name to 'events' in forestore. + /// Adds an event to firestore. + Future addEvent(String userId, EventModel event) async { + try { + final dataMap = event.toFirestoreMap(); + await firestore.collection('users/$userId/Events').add(dataMap); + } catch (e) { + print('Error adding Event to firestore: $e'); + } + } + + /// Returns a Stream of a single event. + Observable getEvent(String userId, String eventId) { + final mappedStream = firestore + .collection('users/$userId/Events') + .document(eventId) + .snapshots() + .map( + (DocumentSnapshot snapshot) { + return EventModel.fromFirestore( + snapshot.data, + id: snapshot.documentID, + ); + }, + ); + + return Observable(mappedStream); + } + + Future deleteEvent(String userId, String eventId) async { + try { + final documentReference = + firestore.document('users/$userId/Events/$eventId'); + await documentReference.delete(); + } catch (e) { + print('Error deleting event in firestore: $e'); + } + } + + Future updateEvent( + String userId, + String eventId, { + String name, + int pendingtasks, + List media, + List tasks, + int highPriority, + int mediumPriority, + int lowPriority, + }) async { + final newData = { + 'name': name, + 'pendingtasks': pendingtasks, + 'media': media, + 'tasks': tasks, + 'highPriority': highPriority, + 'mediumPriority': mediumPriority, + 'lowPriority': lowPriority, + }; + newData.removeWhere((_, value) => value == null); + + try { + final documentReference = + firestore.document('users/$userId/Events/$eventId'); + await documentReference.setData(newData, merge: true); + } catch (e) { + print('Error while updating Event in Firestore: $e'); + } + } + + /// Returns a stream of [List> getUserEvents(String userDocumentId) { final mappedStream = firestore .collection('users')