You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
justMusic/Sources/justMUSIC/lib/view_model/UserViewModel.dart

114 lines
2.8 KiB

import 'package:firebase_auth/firebase_auth.dart' as firebase_auth;
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/foundation.dart';
import 'package:justmusic/services/AuthService.dart';
import 'package:justmusic/services/UserService.dart';
import '../model/User.dart';
import '../model/mapper/UserMapper.dart';
import '../main.dart';
class UserViewModel {
late User _userCurrent;
final AuthService authService = AuthService();
final UserService _userService = UserService();
User get userCurrent => _userCurrent;
set userCurrent(User value) {
_userCurrent = value;
}
// Constructor
UserViewModel();
// Methods
Future<User?> getUser(String id) async {
final user = await MyApp.db.collection("users").doc(id).get();
return UserMapper.toModel(user);
}
login(String pseudo, String password) async {
try {
var token;
await authService.login(pseudo, password);
await updateUserCurrent();
if (!kIsWeb) {
token = await FirebaseMessaging.instance.getToken();
if (_userCurrent.token != token) {
_userService.updateTokenNotify(_userCurrent.id, token);
_userCurrent.token = token;
}
}
} catch (e) {
rethrow;
}
}
bool _isAlphaNumeric(String input) {
final RegExp alphaNumericRegExp = RegExp(r'^[a-zA-Z0-9]+$');
return alphaNumericRegExp.hasMatch(input);
}
updateUserCurrent() async {
try {
final user = await MyApp.db
.collection("users")
.doc(firebase_auth.FirebaseAuth.instance.currentUser?.uid)
.get();
User data = UserMapper.toModel(user);
_userCurrent = data;
} catch (e) {
print(e);
}
}
register(String pseudo, String password, String email) async {
if (!_isAlphaNumeric(pseudo)) {
throw ("Le pseudo doit contenir seulement des lettres et des chiffres");
}
try {
await authService.register(pseudo.toLowerCase(), email, password);
await updateUserCurrent();
} catch (e) {
rethrow;
}
}
Future<List<User>> getUsersByUniqueId(String uniqueId) async {
try {
var response =
await _userService.getUsersByIdUnique(uniqueId.toLowerCase());
var users = response.map((value) {
return UserMapper.toModel(value);
}).toList();
return users;
} catch (e) {
return [];
}
}
addOrDeleteFriend(String id) async {
try {
await _userService.addOrDeleteFriend(id);
} catch (e) {
print(e);
rethrow;
}
}
logout() {
authService.signOut();
}
delete() {
authService.delete();
}
bool isFriend(String id) {
return _userCurrent.followed.contains(id);
}
}