diff --git a/lib/src/resources/authService.dart b/lib/src/resources/authService.dart new file mode 100644 index 0000000..6fb8219 --- /dev/null +++ b/lib/src/resources/authService.dart @@ -0,0 +1,50 @@ +import 'dart:async'; + +import 'package:rxdart/rxdart.dart'; + +import './firestore_provider.dart'; +import './google_sign_in_provider.dart'; +import '../models/summary_model.dart'; +import '../models/user_model.dart'; + +class AuthService { + Observable user; + + AuthService() { + _googleSignInProvider.onAuthStateChange.listen(onUserChanged); + } + + Future onUserChanged(FirebaseUser firebaseUser) async { + if (firebaseUser == null) { + user = null; + return; + } + user = _firestoreProvider.getUser(firebaseUser.email); + } + + final _googleSignInProvider = GoogleSignInProvider(); + final _firestoreProvider = FirestoreProvider(); + + Future googleLoginAndSignup() async { + final user = await _googleSignInProvider.signIn(); + + // 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); + } + } + + Future signOut() { + return _googleSignInProvider.signOut(); + } +} + +final authService = AuthService(); diff --git a/lib/src/resources/repository.dart b/lib/src/resources/repository.dart index 6f9b2e8..45eef9b 100644 --- a/lib/src/resources/repository.dart +++ b/lib/src/resources/repository.dart @@ -5,23 +5,15 @@ import 'package:rxdart/rxdart.dart'; import './firebase_storage_provider.dart'; 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 { final _storageProvider = FirebaseStorageProvider(); final _firestoreProvider = FirestoreProvider(); - final _googleSignInProvider = GoogleSignInProvider(); //--------------------------------CRUD---------------------------------------- - - Observable getUser(String username) { - return _firestoreProvider.getUser(username); - } - Future updateUser( String id, { List tasks, @@ -104,32 +96,6 @@ class Repository { 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,