create-mock-backend
Version:
This is npx starter package for installing your favourite backend template for mockBee.
98 lines (92 loc) • 2.27 kB
JavaScript
import { v4 as uuid } from "uuid";
import { Response } from "miragejs";
import { initialUserData } from "../utils/authUtils";
const jwt = require("jsonwebtoken");
/**
* All the routes related to Auth are present here.
* These are Publicly accessible routes.
* */
/**
* This handler handles user signups.
* send POST Request at /api/auth/signup
* body contains {firstName, lastName, email, password}
* */
export const signupHandler = function (schema, request) {
const { email, password, ...rest } = JSON.parse(request.requestBody);
try {
// check if email already exists
const foundUser = schema.users.findBy({ email: email });
if (foundUser) {
return new Response(
422,
{},
{
errors: ["Unprocessable Entity. Email Already Exists."],
}
);
}
const newUser = {
email,
password,
...rest,
...initialUserData,
_id: uuid(),
};
const createdUser = schema.users.create(newUser);
const encodedToken = jwt.sign(
{ email, password },
process.env.REACT_APP_JWT_SECRET
);
return new Response(201, {}, { createdUser, encodedToken });
} catch (error) {
return new Response(
500,
{},
{
error,
}
);
}
};
/**
* This handler handles user login.
* send POST Request at /api/auth/login
* body contains {email, password}
* */
export const loginHandler = function (schema, request) {
const { email, password } = JSON.parse(request.requestBody);
try {
const encodedToken = jwt.sign(
{ email, password },
process.env.REACT_APP_JWT_SECRET
);
const foundUser = schema.users.findBy({ email: email });
if (!foundUser) {
return new Response(
404,
{},
{ errors: ["The email you entered is not Registered. Not Found error"] }
);
}
if (foundUser.password === password) {
return new Response(200, {}, { foundUser, encodedToken });
}
new Response(
401,
{},
{
errors: [
"The credentials you entered are invalid. Unauthorized access error.",
],
}
);
} catch (error) {
return new Response(
500,
{},
{
error,
}
);
}
};