Skip to content

Commit b4e60b7

Browse files
committed
imnplement ValidationError
1 parent 5d6493f commit b4e60b7

3 files changed

Lines changed: 29 additions & 0 deletions

File tree

packages/models/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"mongoose-timestamp": "^0.6",
2424
"pg": "^8.13.0",
2525
"pino": "^8.8.0",
26+
"tiny-invariant": "^1.3.3",
2627
"uuid": "^8.3.2"
2728
},
2829
"scripts": {

packages/models/src/user/index.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22

33
const { v4: uuidv4 } = require('uuid');
4+
const invariant = require('tiny-invariant');
45

56
const { userTable, passwordTable } = require('../../schema/schema');
67
const { db } = require('../drizzle');
@@ -9,6 +10,18 @@ const { eq } = require('drizzle-orm');
910
const ModelError = require('../modelError');
1011
const { 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+
1225
const findUserByNameOrEmail = async function findUserByNameOrEmail (
1326
emailOrName
1427
) {
@@ -37,7 +50,16 @@ const findUserByEmailAndRole = async function findUserByEmailAndRole ({
3750
};
3851

3952
const 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

yarn.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4237,6 +4237,11 @@ thread-stream@^3.0.0:
42374237
dependencies:
42384238
real-require "^0.2.0"
42394239

4240+
tiny-invariant@^1.3.3:
4241+
version "1.3.3"
4242+
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127"
4243+
integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==
4244+
42404245
to-regex-range@^5.0.1:
42414246
version "5.0.1"
42424247
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"

0 commit comments

Comments
 (0)