before rediense

This commit is contained in:
Felipe
2024-02-26 14:46:26 -05:00
parent 37b6665002
commit a1e367bdf3
10 changed files with 341 additions and 164 deletions
@@ -19,7 +19,14 @@ class FirebaseUserRepository implements UserRepository {
FirebaseUserRepository(this._firebaseAuth) {
_firebaseAuth.userChanges().listen((user) async {
if (user != null) {
await updateFromFirebase(user.uid);
await updateFromFirebase2(
userId: user.uid,
email: user.email,
name: user.displayName,
phone: user.phoneNumber,
picture: user.photoURL,
nickname: user.displayName?.trim().toLowerCase(),
);
} else {
_userStreamController.add(null);
}
@@ -27,17 +34,35 @@ class FirebaseUserRepository implements UserRepository {
}
Future<void> updateFromFirebase(String userId) async {
return updateFromFirebase2(userId: userId);
}
Future<void> updateFromFirebase2({
required String userId,
String? email,
String? name,
String? phone,
String? picture,
String? nickname,
}) async {
try {
final myUser = await getMyUser(userId);
var myUser = await getMyUser(userId);
if (myUser == null) {
await createUser(MyUser(
id: userId,
email: email,
name: name,
phone: phone,
picture: picture,
nickname: name?.trim().toLowerCase(),
));
myUser = await getMyUser(userId);
}
_userStreamController.add(myUser);
} catch (e) {
try {
await createUser(userId);
final myUser = await getMyUser(userId);
_userStreamController.add(myUser);
} catch (e) {
_userStreamController.add(null);
}
log('xd -- Error updating from firebase ${e.toString()}');
_userStreamController.add(null);
}
}
@@ -55,12 +80,13 @@ class FirebaseUserRepository implements UserRepository {
@override
Future<MyUser> signUp(MyUser myUser, String password) async {
try {
UserCredential user = await _firebaseAuth.createUserWithEmailAndPassword(
UserCredential userCredential =
await _firebaseAuth.createUserWithEmailAndPassword(
email: myUser.email!,
password: password,
);
myUser = myUser.copyWith(id: user.user!.uid);
myUser = myUser.copyWith(id: userCredential.user!.uid);
return myUser;
} catch (e) {
@@ -102,6 +128,14 @@ class FirebaseUserRepository implements UserRepository {
var credentials = await _firebaseAuth.signInWithCredential(
PhoneAuthProvider.credential(
verificationId: verificationId, smsCode: code));
if (credentials.user == null) {
await setUserData(MyUser(
id: credentials.user?.uid ?? '',
phone: credentials.user?.phoneNumber ?? '',
));
}
return credentials.user != null ? true : false;
} catch (e) {
if (e is FirebaseAuthException) {
@@ -165,11 +199,16 @@ class FirebaseUserRepository implements UserRepository {
// Get user data
@override
Future<MyUser> getMyUser(String myUserId) async {
Future<MyUser?> getMyUser(String myUserId) async {
try {
return usersCollection.doc(myUserId).get().then((value) {
final valueData = value.data();
if (valueData == null || valueData.isEmpty || !value.exists) {
return null;
}
return MyUser.fromEntity(
MyUserEntity.fromDocument(value.data()!),
MyUserEntity.fromDocument(valueData),
);
});
} catch (e) {
@@ -179,8 +218,22 @@ class FirebaseUserRepository implements UserRepository {
}
@override
Future<void> updateUserInfo(String userId, Map<String, dynamic> data) async {
Future<void> updateUserInfo(
String userId, String? picture, Map<String, dynamic> data) async {
try {
if (picture != null) {
File imageFile = File(picture);
Reference firebaseStoreRef =
FirebaseStorage.instance.ref().child('$userId/PP/${userId}_lead');
await firebaseStoreRef.putFile(
imageFile,
);
String url = await firebaseStoreRef.getDownloadURL();
await usersCollection.doc(userId).update({'picture': url});
}
await usersCollection.doc(userId).update(data);
await updateFromFirebase(userId);
@@ -209,16 +262,9 @@ class FirebaseUserRepository implements UserRepository {
}
@override
Future<void> createUser(String userId) async {
Future<void> createUser(MyUser myUser) async {
try {
await usersCollection.doc(userId).set({
'id': userId,
'name': '',
'nickname': '',
'email': '',
'phone': '',
'picture': '',
});
await usersCollection.doc(myUser.id).set(myUser.toEntity().toDocument());
} catch (e) {
log(e.toString());
}
@@ -20,11 +20,12 @@ abstract class UserRepository {
Future<void> setUserData(MyUser user);
Future<MyUser> getMyUser(String myUserId);
Future<MyUser?> getMyUser(String myUserId);
Future<void> updateUserInfo(String userId, Map<String, dynamic> data);
Future<void> updateUserInfo(
String userId, String picture, Map<String, dynamic> data);
Future<String> uploadPicture(String file, String userId);
Future<void> createUser(String userId);
Future<void> createUser(MyUser myUser);
}