From 79a5196aff01efa2c47dea41fa584b5b33401d14 Mon Sep 17 00:00:00 2001 From: AYM1607 Date: Sat, 2 Mar 2019 23:05:35 -0600 Subject: [PATCH] Added method to update user data in the firestore provider --- lib/src/resources/firestore_provider.dart | 33 +++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/lib/src/resources/firestore_provider.dart b/lib/src/resources/firestore_provider.dart index b806cfb..321ad9d 100644 --- a/lib/src/resources/firestore_provider.dart +++ b/lib/src/resources/firestore_provider.dart @@ -5,6 +5,7 @@ import 'package:rxdart/rxdart.dart'; import '../models/event_model.dart'; import '../models/user_model.dart'; +import '../models/summary_model.dart'; import '../models/task_model.dart'; /// A connection to the Cloud Firestore database @@ -41,6 +42,7 @@ class FirestoreProvider { return Observable(mappedStream); } + /// Creates a new instance of a user in Firestore. Future createUser(UserModel user) async { try { final dataMap = user.toFirestoreMap(); @@ -50,6 +52,7 @@ class FirestoreProvider { } } + /// Verifies if a user with the given username is already in the database. Future userExists(String username) async { final querySnapshot = await _firestore .collection('users') @@ -58,6 +61,36 @@ class FirestoreProvider { return querySnapshot.documents.length > 0; } + Future updateUser( + String id, { + List tasks, + SummaryModel summary, + int pendingHigh, + int pendingMedium, + int pendingLow, + }) async { + final newData = { + 'id': id, + 'tasks': tasks, + 'summary': summary, + 'pendingHigh': pendingHigh, + 'pendingMedium': pendingMedium, + 'pendingLow': pendingLow, + }; + newData.removeWhere((key, value) => value == null); + + if (newData.isEmpty) { + return; + } + + try { + final documentReference = _firestore.collection('users').document(id); + await documentReference.setData(newData, merge: true); + } catch (e) { + print('Error trying to update user data: $e'); + } + } + //-------------------------Task related operations---------------------------- /// Adds a task to firestore.