groceries_manager/lib/db/crud/user_crud.dart
2025-01-05 16:01:21 +07:00

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;
}
}