Skip to content

Commit 220c4dd

Browse files
committed
Create registration route
1 parent 55062af commit 220c4dd

File tree

4 files changed

+82
-1
lines changed

4 files changed

+82
-1
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { Request, Response } from "express";
2+
import userRepository from "../../repositories/user.repository";
3+
import User from "../../models/user";
4+
import { validationResult } from "express-validator";
5+
6+
export const createUser = async (req: Request, res: Response) => {
7+
const errors = validationResult(req);
8+
9+
if (!errors.isEmpty()) {
10+
return res.status(400).json({
11+
message: 'Invalid data provided for registration',
12+
errors: errors.array()
13+
});
14+
}
15+
16+
try {
17+
const user = req.body;
18+
const newUser = await userRepository.save(new User({
19+
...user, role: 'user'
20+
}));
21+
22+
return res.status(200).json({
23+
user: newUser,
24+
});
25+
26+
} catch (error: any) {
27+
console.log(error);
28+
res.status(400).json({
29+
message: error.message.toString(),
30+
});
31+
}
32+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { Request } from "express";
2+
import { checkSchema } from "express-validator";
3+
import userRepository from "../../repositories/user.repository";
4+
5+
const validator = checkSchema({
6+
firstname: { notEmpty: { errorMessage: "Firstname is required" } },
7+
lastname: { notEmpty: { errorMessage: "Lastname is required" } },
8+
email: {
9+
notEmpty: {
10+
errorMessage: "Email is required",
11+
bail: true
12+
},
13+
isEmail: {
14+
errorMessage: "Email address is not valid",
15+
bail: true
16+
},
17+
custom: {
18+
options: async (value: string) => {
19+
const emailExist = await userRepository.existByEmail(value);
20+
if (emailExist) throw new Error();
21+
},
22+
errorMessage: "Email is already used"
23+
}
24+
},
25+
password: {
26+
isLength: {
27+
options: { min: 6 },
28+
},
29+
errorMessage: "Password should have at least 6 characters"
30+
},
31+
phone: {
32+
isMobilePhone: {
33+
options: ['any', { strictMode: true }],
34+
},
35+
}
36+
}, ['body']);
37+
38+
export default validator;

src/api/routes/auth.routes.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Router } from "express";
2+
import { createUser } from "../controllers/users.controller";
3+
import registerValidator from "../middlewars/register.validator";
4+
5+
const router = Router();
6+
7+
router.post('/register', registerValidator, createUser);
8+
9+
export default router;

src/app.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import express, { Request, Response } from 'express';
2-
import tasksRoutes from './api/routes/tasks';
2+
import tasksRoutes from './api/routes/tasks.routes';
3+
import authRoutes from './api/routes/auth.routes';
34

45
const app = express();
56

67
app.use(express.json());
78
app.use('/tasks', tasksRoutes);
9+
app.use('/auth', authRoutes);
810

911
app.get('/', (req: Request, res: Response) => {
1012
res.send('Hello, TypeScript Express!');

0 commit comments

Comments
 (0)