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 addUser({ required String login, required String password, }) async { return await managers.user.createReturningOrNull((c) => c( login: login, password: hashPassword(password), )); } Future> getUsers() async { return await managers.user.get(); } Future anyUserExists() async { return await managers.user.exists(); } Future 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 getUser(UserData user) async { return await managers.user.filter((f) => f.id(user.id)).getSingle(); } Future 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 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 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; } }