ln/app/server/graphql/resolvers/auth/register.ts

49 lines
1.3 KiB
TypeScript

import bcrypt from 'bcrypt';
export async function SignUpResolver(_: any, input: any): Promise<any> {
// validate
// db
const users = [
{
id: '1',
email: 'joe@test.com',
username: 'Joe',
password: 'test'
}
];
const usersDB = { users };
// check for duplicate email+username
// encrypt the password
const hashedPwd = await bcrypt.hash(input.pwd, 10);
// store user in the db, return new user
return user;
}
const handleNewUser = async (req, res) => {
const { user, pwd } = req.body;
if (!user || !pwd)
return res.status(400).json({ message: 'Username and password are required.' });
// check for duplicate usernames in the db.
const duplicate = usersDB.users.find(person => person.username === user);
if (duplicate) return res.status(409);
try {
// encrypt the password
const hashedPwd = await brcypt.hash(pwd, 10);
// store the new user
const newUser = { username: user, password: hashedPwd };
usersDB.setUsers([...usersDB.users, newUser]);
await fs_promises.writeFile(
path.join(__dirname, '..', 'model', 'users.json'),
JSON.stringify(usersDB.users)
);
console.log(usersDB.users);
res.status(201).json({ success: `New user ${user} created!` });
} catch (err) {
res.status(500).json({ message: err.message });
}
};