84 lines
2.1 KiB
Dart
84 lines
2.1 KiB
Dart
part of '../database.dart';
|
|
|
|
extension UserCrud on AppDatabase {
|
|
String hashPassword(String password) {
|
|
final passwordBytes = utf8.encode(password);
|
|
final hashedPassword = sha512224.convert(passwordBytes);
|
|
return hashedPassword.toString();
|
|
}
|
|
|
|
Future<UserData?> addUser({
|
|
required String login,
|
|
required String password,
|
|
}) async {
|
|
return await managers.user.createReturningOrNull((c) => c(
|
|
login: login,
|
|
password: hashPassword(password),
|
|
));
|
|
}
|
|
|
|
Future<List<UserData>> getUsers() async {
|
|
return await managers.user.get();
|
|
}
|
|
|
|
Future<bool> anyUserExists() async {
|
|
return await managers.user.exists();
|
|
}
|
|
|
|
Future<UserData?> findUser({
|
|
required String login,
|
|
required String password,
|
|
}) async {
|
|
return await managers.user
|
|
.filter((f) => f.login(login))
|
|
.filter((f) => f.password(hashPassword(password)))
|
|
.getSingleOrNull();
|
|
}
|
|
|
|
Future<UserData> getUser(UserData user) async {
|
|
return await managers.user.filter((f) => f.id(user.id)).getSingle();
|
|
}
|
|
|
|
Future<bool> updateUser(
|
|
UserData currentUser,
|
|
UserData updatedUser, {
|
|
String? login,
|
|
String? password,
|
|
}) async {
|
|
if (currentUser.id == updatedUser.id) {
|
|
return false;
|
|
}
|
|
|
|
await managers.user.filter((f) => f.id(updatedUser.id)).update((u) => u(
|
|
login: Value.absentIfNull(login),
|
|
password: Value.absentIfNull(
|
|
password != null ? hashPassword(password) : null),
|
|
));
|
|
|
|
return true;
|
|
}
|
|
|
|
Future<bool> updateUserPassword(
|
|
UserData user, {
|
|
required String password,
|
|
}) async {
|
|
await managers.user.filter((f) => f.id(user.id)).update((u) => u(
|
|
password: Value(hashPassword(password)),
|
|
));
|
|
|
|
return true;
|
|
}
|
|
|
|
Future<bool> deleteUser(UserData user) async {
|
|
final usersCount = await managers.user.count();
|
|
if (usersCount == 0) {
|
|
return false;
|
|
}
|
|
final deletedCount = await managers.user
|
|
.filter(
|
|
(f) => f.id(user.id),
|
|
)
|
|
.delete();
|
|
return deletedCount != 0;
|
|
}
|
|
}
|