From e7fa1e7afa0d140b1b096560a44e50638ab23a62 Mon Sep 17 00:00:00 2001 From: AYM1607 Date: Sat, 23 Feb 2019 16:51:27 -0600 Subject: [PATCH] Implemented the rest of CRUD operations for the task model --- lib/src/resources/firestore_provider.dart | 77 +++++++++++++++++------ 1 file changed, 58 insertions(+), 19 deletions(-) diff --git a/lib/src/resources/firestore_provider.dart b/lib/src/resources/firestore_provider.dart index eb26cbd..90f5313 100644 --- a/lib/src/resources/firestore_provider.dart +++ b/lib/src/resources/firestore_provider.dart @@ -46,13 +46,66 @@ class FirestoreProvider { //-------------------------Task related operations---------------------------- - /// Adds a task to the tasks collection in firestore. + /// Adds a task to firestore. Future addTask(TaskModel task) async { - final dataMap = task.toFirestoreMap(); - await firestore.collection('tasks').add(dataMap); + try { + final dataMap = task.toFirestoreMap(); + await firestore.collection('tasks').add(dataMap); + } catch (e) { + print('Error adding task to firestore: $e'); + } } - /// Returns a stream of [List] + /// Returns a Stream of a single task from an id. + Observable getTask(String id) { + final mappedStream = + firestore.collection('tasks').document(id).snapshots().map( + (DocumentSnapshot snapshot) { + return TaskModel.fromFirestore( + snapshot.data, + id: snapshot.documentID, + ); + }, + ); + + return Observable(mappedStream); + } + + /// Deletes a task from firestore. + Future deleteTask(String id) async { + try { + final documentReference = firestore.collection('tasks').document(id); + await documentReference.delete(); + } catch (e) { + print('Error deleting task from firestore: $e'); + } + } + + /// Updates a task in firestore. + /// + /// Only the [text], [priority] and [done] attributes can be update. + /// Provide at least one of these values. + Future updateTask( + String id, { + String text, + int priority, + bool done, + }) async { + final newData = { + 'text': text, + 'priority': priority, + 'done': done, + }; + newData.removeWhere((key, value) => value == null); + try { + final documentReference = firestore.collection('tasks').document(id); + await documentReference.setData(newData, merge: true); + } catch (e) { + print('Error updating task in firestore: $e'); + } + } + + /// Returns a stream of [List] that correspond to a particular user. /// /// The [event] parameter is used to query tasks that are part of a certain /// event. @@ -82,23 +135,9 @@ class FirestoreProvider { return Observable(mappedStream); } - Observable getTask(String id) { - final mappedStream = - firestore.collection('tasks').document(id).snapshots().map( - (DocumentSnapshot snapshot) { - return TaskModel.fromFirestore( - snapshot.data, - id: snapshot.documentID, - ); - }, - ); - - return Observable(mappedStream); - } - //-----------------------Event related operations----------------------------- - // TODO: Change the Events collction name to 'events' + // TODO: Change the Events collction name to 'events' in forestore. Observable> getUserEvents(String userDocumentId) { final mappedStream = firestore .collection('users')