11'use strict' ;
22
33const { v4 : uuidv4 } = require ( 'uuid' ) ;
4+ const invariant = require ( 'tiny-invariant' ) ;
45
56const { userTable, passwordTable } = require ( '../../schema/schema' ) ;
67const { db } = require ( '../drizzle' ) ;
@@ -9,6 +10,18 @@ const { eq } = require('drizzle-orm');
910const ModelError = require ( '../modelError' ) ;
1011const { checkPassword, validatePassword, passwordHasher } = require ( '../password/utils' ) ;
1112
13+ const validateField = function validateField ( field , expr , msg ) {
14+ try {
15+ invariant ( expr , msg ) ;
16+ } catch ( error ) {
17+ const err = new Error ( ) ;
18+ err . name = 'ValidationError' ;
19+ err . errors = [ ] ;
20+ err . errors [ field ] = { message : msg } ;
21+ throw err ;
22+ }
23+ }
24+
1225const findUserByNameOrEmail = async function findUserByNameOrEmail (
1326 emailOrName
1427) {
@@ -37,7 +50,16 @@ const findUserByEmailAndRole = async function findUserByEmailAndRole ({
3750} ;
3851
3952const createUser = async function createUser ( name , email , password , language ) {
53+
54+ try {
55+ validateField ( 'name' , name . length > 0 , 'Name is required' ) ;
56+ validateField ( 'password' , validatePassword ( password ) , 'Password must be at least 8 characters' ) ;
57+ } catch ( error ) {
58+ throw error ;
59+ }
60+
4061 try {
62+ // TODO: Wrap this in a transaction
4163 const hashedPassword = await passwordHasher ( password ) ;
4264 const user = await db
4365 . insert ( userTable )
@@ -55,6 +77,7 @@ const createUser = async function createUser (name, email, password, language) {
5577 return user [ 0 ] ;
5678 } catch ( error ) {
5779 console . log ( error ) ;
80+ throw error ;
5881 }
5982} ;
6083
0 commit comments