diff --git a/lib/src/resources/firestore_provider.dart b/lib/src/resources/firestore_provider.dart index 2b95553..0809840 100644 --- a/lib/src/resources/firestore_provider.dart +++ b/lib/src/resources/firestore_provider.dart @@ -279,9 +279,9 @@ class FirestoreProvider { /// Returns a stream of [List> getUserEvents(String userDocumentId) { + Observable> getUserEvents(String userId) { final mappedStream = - _firestore.collection('users/$userDocumentId/Events').snapshots().map( + _firestore.collection('users/$userId/Events').snapshots().map( (QuerySnapshot snapshot) { return snapshot.documents.map((DocumentSnapshot documentSnapshot) { return EventModel.fromFirestore( diff --git a/lib/src/resources/google_sign_in_provider.dart b/lib/src/resources/google_sign_in_provider.dart index c18144a..9a934ca 100644 --- a/lib/src/resources/google_sign_in_provider.dart +++ b/lib/src/resources/google_sign_in_provider.dart @@ -4,6 +4,8 @@ import 'package:firebase_auth/firebase_auth.dart'; import 'package:google_sign_in/google_sign_in.dart'; import 'package:rxdart/rxdart.dart'; +export 'package:firebase_auth/firebase_auth.dart' show FirebaseUser; + /// A Google authentication provider. /// /// Connects to both Google and Firebase to authenticate a user. diff --git a/lib/src/resources/repository.dart b/lib/src/resources/repository.dart index f2268d6..6f9b2e8 100644 --- a/lib/src/resources/repository.dart +++ b/lib/src/resources/repository.dart @@ -1,3 +1,6 @@ +import 'dart:async'; +import 'dart:io'; + import 'package:rxdart/rxdart.dart'; import './firebase_storage_provider.dart'; @@ -5,6 +8,7 @@ import './firestore_provider.dart'; import './google_sign_in_provider.dart'; import '../models/event_model.dart'; import '../models/task_model.dart'; +import '../models/summary_model.dart'; import '../models/user_model.dart'; class Repository { @@ -12,9 +16,128 @@ class Repository { final _firestoreProvider = FirestoreProvider(); final _googleSignInProvider = GoogleSignInProvider(); + //--------------------------------CRUD---------------------------------------- + Observable getUser(String username) { return _firestoreProvider.getUser(username); } - Future createUser(UserModel user) {} + Future updateUser( + String id, { + List tasks, + SummaryModel summary, + int pendingHigh, + int pendingMedium, + int pendingLow, + }) { + return _firestoreProvider.updateUser(id, + tasks: tasks, + summary: summary, + pendingHigh: pendingHigh, + pendingMedium: pendingMedium, + pendingLow: pendingLow); + } + + Future addTask(TaskModel task) { + return _firestoreProvider.addTask(task); + } + + Future deleteTask(String id) { + return _firestoreProvider.deleteTask(id); + } + + Observable getTask(String id) { + return _firestoreProvider.getTask(id); + } + + Future updateTask( + String id, { + String text, + int priority, + bool done, + }) { + return _firestoreProvider.updateTask(id, + text: text, priority: priority, done: done); + } + + Observable> getUserTasks(String username, {String event}) { + return _firestoreProvider.getUserTasks(username, event: event); + } + + Future addEvent(String userId, EventModel event) { + return _firestoreProvider.addEvent(userId, event); + } + + Future deleteEvent(String userId, String eventId) { + return _firestoreProvider.deleteEvent(userId, eventId); + } + + Observable getEvent(String userId, String eventId) { + return _firestoreProvider.getEvent(userId, eventId); + } + + Future updateEvent( + String userId, + String eventId, { + String name, + int pendingtasks, + List media, + List tasks, + int highPriority, + int mediumPriority, + int lowPriority, + }) { + return _firestoreProvider.updateEvent( + userId, + eventId, + name: name, + pendingtasks: pendingtasks, + media: media, + tasks: tasks, + highPriority: highPriority, + mediumPriority: mediumPriority, + lowPriority: lowPriority, + ); + } + + Observable> getUserEvents(String userId) { + return _firestoreProvider.getUserEvents(userId); + } + + //-----------------------------------AUTH------------------------------------- + + Future googleLoginAndSignup() async { + final user = await _googleSignInProvider.signIn(); + if (user == null) { + return null; + } + // Create a new user in Firestore if this is the first time signing in. + if (!await _firestoreProvider.userExists(user.email)) { + final newUserModel = UserModel( + username: user.email, + tasks: [], + summary: SummaryModel(), + pendingHigh: 0, + pendingMedium: 0, + pendingLow: 0, + ); + await _firestoreProvider.createUser(newUserModel, user.uid); + } + return user; + } + + Future signOut() { + return _googleSignInProvider.signOut(); + } + + //---------------------------------STORAGE------------------------------------ + + StorageUploadTask uploadFile(File file, + {String folder = '', String type = 'png'}) { + return _storageProvider.uploadFile(file, folder: folder, type: type); + } + + Future deleteFile(String path) { + return _storageProvider.deleteFile(path); + } }