import { hash, compare } from 'bcrypt'; import { DbUser } from '#db/schemas/index.js'; import { RegisterDto } from '#dto/auth/index.js'; /** * @param data {RegisterDto} * @returns {Promise<(Error | HydratedDocument, ObtainSchemaGeneric & ObtainSchemaGeneric, ObtainSchemaGeneric, ObtainSchemaGeneric>)[]>} */ export async function registerUser(data) { if (!(data instanceof RegisterDto)) throw new Error('Invalid data type. Expected RegisterDto.'); const passwordHash = await hash(data.password, 10); if (!passwordHash) { throw new Error('Failed to hash password.'); } return DbUser.create({ username: data.username, passwordHash, email: data.email, type: data.type }); } export async function deleteUser(id, password) { const user = await DbUser.findById(id); DbUser.exists({ _id: id }).then(exists => { if (!exists) { throw new Error('User does not exist.'); } }); if (!user) { throw new Error('User not found.'); } const isPasswordValid = await compare(password, user.passwordHash); if (!isPasswordValid) { throw new Error('Invalid password.'); } await DbUser.findByIdAndDelete(id); }