Moved all auth logic from the repository to the auth service

This commit is contained in:
Mariano Uvalle 2019-03-05 22:44:26 -06:00
parent e21d8dfd54
commit 0e1c1a4f33
2 changed files with 50 additions and 34 deletions

View file

@ -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<UserModel> user;
AuthService() {
_googleSignInProvider.onAuthStateChange.listen(onUserChanged);
}
Future<void> onUserChanged(FirebaseUser firebaseUser) async {
if (firebaseUser == null) {
user = null;
return;
}
user = _firestoreProvider.getUser(firebaseUser.email);
}
final _googleSignInProvider = GoogleSignInProvider();
final _firestoreProvider = FirestoreProvider();
Future<void> 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: <String>[],
summary: SummaryModel(),
pendingHigh: 0,
pendingMedium: 0,
pendingLow: 0,
);
await _firestoreProvider.createUser(newUserModel, user.uid);
}
}
Future<void> signOut() {
return _googleSignInProvider.signOut();
}
}
final authService = AuthService();

View file

@ -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<UserModel> getUser(String username) {
return _firestoreProvider.getUser(username);
}
Future<void> updateUser(
String id, {
List<String> tasks,
@ -104,32 +96,6 @@ class Repository {
return _firestoreProvider.getUserEvents(userId);
}
//-----------------------------------AUTH-------------------------------------
Future<FirebaseUser> 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: <String>[],
summary: SummaryModel(),
pendingHigh: 0,
pendingMedium: 0,
pendingLow: 0,
);
await _firestoreProvider.createUser(newUserModel, user.uid);
}
return user;
}
Future<void> signOut() {
return _googleSignInProvider.signOut();
}
//---------------------------------STORAGE------------------------------------
StorageUploadTask uploadFile(File file,