Merge branch 'refactor-members'
This commit is contained in:
commit
832112fb41
@ -3,7 +3,7 @@ import bcrypt from 'bcrypt';
|
|||||||
import { SignJWT } from 'jose';
|
import { SignJWT } from 'jose';
|
||||||
import { JWT_ISSUER, JWT_AUDIENCE, JWT_SECRET, JWT_EXPIRATION, JWT_SECRET_KEY } from '../config/auth.config';
|
import { JWT_ISSUER, JWT_AUDIENCE, JWT_SECRET, JWT_EXPIRATION, JWT_SECRET_KEY } from '../config/auth.config';
|
||||||
import { Member, User } from '../types/member';
|
import { Member, User } from '../types/member';
|
||||||
import { getMember, createMember, userAdapter } from './member.controller';
|
import memberService from '../services/member.service';
|
||||||
import { Either, eitherLeft, eitherRight } from '../utils/utils';
|
import { Either, eitherLeft, eitherRight } from '../utils/utils';
|
||||||
|
|
||||||
const register = (req: Request, res: Response) => {
|
const register = (req: Request, res: Response) => {
|
||||||
@ -22,7 +22,7 @@ const register = (req: Request, res: Response) => {
|
|||||||
res.status(500).send();
|
res.status(500).send();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const member: Either<Member, string> = await createMember(name, hash);
|
const member: Either<Member, string> = await memberService.createMember(name, hash);
|
||||||
if (member.hasRight) {
|
if (member.hasRight) {
|
||||||
res.status(401).send(member.right);
|
res.status(401).send(member.right);
|
||||||
return;
|
return;
|
||||||
@ -33,7 +33,7 @@ const register = (req: Request, res: Response) => {
|
|||||||
.setIssuer(JWT_ISSUER)
|
.setIssuer(JWT_ISSUER)
|
||||||
.setExpirationTime(JWT_EXPIRATION)
|
.setExpirationTime(JWT_EXPIRATION)
|
||||||
.sign(JWT_SECRET_KEY);
|
.sign(JWT_SECRET_KEY);
|
||||||
res.status(200).send({ member: userAdapter(member.left), token: token});
|
res.status(200).send({ member: memberService.userAdapter(member.left), token: token});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -44,7 +44,7 @@ const login = async (req: Request, res: Response) => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const name: string = req.body.name;
|
const name: string = req.body.name;
|
||||||
const member: Either<Member, string> = await getMember(name);
|
const member: Either<Member, string> = await memberService.getMember(name);
|
||||||
if (member.hasRight) {
|
if (member.hasRight) {
|
||||||
res.send(member.right).send();
|
res.send(member.right).send();
|
||||||
return;
|
return;
|
||||||
@ -64,7 +64,7 @@ const login = async (req: Request, res: Response) => {
|
|||||||
.setIssuer(JWT_ISSUER)
|
.setIssuer(JWT_ISSUER)
|
||||||
.setExpirationTime(JWT_EXPIRATION)
|
.setExpirationTime(JWT_EXPIRATION)
|
||||||
.sign(JWT_SECRET_KEY);
|
.sign(JWT_SECRET_KEY);
|
||||||
res.status(200).send({ member: userAdapter(member.left), token: token});
|
res.status(200).send({ member: memberService.userAdapter(member.left), token: token});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,48 +1,36 @@
|
|||||||
import { new_client } from '../db/db_client';
|
import { RequestHandler } from "express";
|
||||||
import { Member, User } from '../types/member';
|
import memberService from "../services/member.service";
|
||||||
import { Either, eitherLeft, eitherRight } from '../utils/utils';
|
|
||||||
|
|
||||||
const getDefaultUser = (): User => ({ id_member: -1, name: "unknown" });
|
const memberByName: RequestHandler<{name: string;}> = async (req, res) => {
|
||||||
const getDefaultMember = (): Member => ({ id_member: -1, name: "unknown", password: "none" });
|
const memberEither = await memberService.getMember(req.params.name);
|
||||||
|
|
||||||
const getMember = async (idOrName: number | string): Promise<Either<Member, string>> => {
|
if (memberEither.hasRight) {
|
||||||
const client = new_client();
|
res.sendStatus(404);
|
||||||
await client.connect();
|
return;
|
||||||
let res;
|
|
||||||
if (typeof idOrName !== 'number') {
|
|
||||||
res = await client.query("SELECT * FROM membres WHERE nom_membre=$1;", [`${idOrName}`]);
|
|
||||||
} else {
|
|
||||||
res = await client.query("SELECT * FROM membres WHERE id_membre=$1;", [idOrName]);
|
|
||||||
}
|
|
||||||
if (res.rows.length === 0) {
|
|
||||||
await client.end();
|
|
||||||
return eitherRight<Member, string>("Does not exist.");
|
|
||||||
}
|
|
||||||
const member: Member = { id_member: res.rows[0].id_membre, name: res.rows[0].nom_membre, password: res.rows[0].mdp_membre };
|
|
||||||
await client.end();
|
|
||||||
|
|
||||||
return eitherLeft<Member, string>(member);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const createMember = async (name: string, passwd: string): Promise<Either<Member, string>> => {
|
const member = memberEither.left;
|
||||||
const gettingMember = await getMember(name);
|
|
||||||
if (!gettingMember.hasRight) {
|
res.render('member.ejs', { member });
|
||||||
return eitherRight<Member, string>("Already in database.");
|
};
|
||||||
}
|
|
||||||
const client = new_client();
|
const memberById: RequestHandler<{id: string;}> = async (req, res) => {
|
||||||
await client.connect();
|
const id = parseInt(req.params.id);
|
||||||
const res = await client.query("INSERT INTO membres (nom_membre, mdp_membre) VALUES ($1, $2) RETURNING *;", [`${name}`, `${passwd}`]);
|
const memberEither = await memberService.getMember(id);
|
||||||
if (res.rows.length === 0) {
|
|
||||||
await client.end();
|
if (memberEither.hasRight) {
|
||||||
return eitherRight<Member, string>("Something went wrong");
|
res.sendStatus(404);
|
||||||
}
|
return;
|
||||||
const member: Member = { id_member: res.rows[0].id_membre, name: res.rows[0].nom_membre, password: res.rows[0].mdp_membre };
|
|
||||||
await client.end();
|
|
||||||
return eitherLeft<Member, string>(member);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function userAdapter(member: Member): User {
|
const member = memberEither.left;
|
||||||
return { id_member: member.id_member, name: member.name };
|
|
||||||
}
|
|
||||||
|
|
||||||
export { getDefaultUser, getDefaultMember, getMember, createMember, userAdapter };
|
res.render('member.ejs', { member });
|
||||||
|
};
|
||||||
|
|
||||||
|
const memberController = {
|
||||||
|
memberByName,
|
||||||
|
memberById,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default memberController;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Request, Response } from 'express';
|
import { Request, Response } from 'express';
|
||||||
import { jwtVerify } from 'jose';
|
import { jwtVerify } from 'jose';
|
||||||
import { JWT_SECRET_KEY } from '../config/auth.config';
|
import { JWT_SECRET_KEY } from '../config/auth.config';
|
||||||
import { getMember } from '../controllers/member.controller';
|
import memberService from '../services/member.service';
|
||||||
import { Member } from '../types/member';
|
import { Member } from '../types/member';
|
||||||
import { Either } from '../utils/utils';
|
import { Either } from '../utils/utils';
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ const getUsername = async (req: Request, res: Response, next: () => void) => {
|
|||||||
try {
|
try {
|
||||||
const { payload } = await jwtVerify(token, JWT_SECRET_KEY);
|
const { payload } = await jwtVerify(token, JWT_SECRET_KEY);
|
||||||
const name: string = payload.name as string;
|
const name: string = payload.name as string;
|
||||||
const member: Either<Member, string> = await getMember(name);
|
const member: Either<Member, string> = await memberService.getMember(name);
|
||||||
|
|
||||||
if (!member.hasRight) {
|
if (!member.hasRight) {
|
||||||
res.locals.user = {
|
res.locals.user = {
|
||||||
|
@ -3,6 +3,7 @@ import db from '../db';
|
|||||||
import { getUsername, verifyAuthentication } from '../middlewares/auth.middleware'
|
import { getUsername, verifyAuthentication } from '../middlewares/auth.middleware'
|
||||||
import authRoute from './auth.route'
|
import authRoute from './auth.route'
|
||||||
import marquesRoute from './marque.route'
|
import marquesRoute from './marque.route'
|
||||||
|
import memberRouter from './member.route'
|
||||||
|
|
||||||
const routes = express.Router();
|
const routes = express.Router();
|
||||||
|
|
||||||
@ -18,5 +19,6 @@ routes.get("/message", async (_req, res) => {
|
|||||||
|
|
||||||
routes.use("/auth", authRoute);
|
routes.use("/auth", authRoute);
|
||||||
routes.use("/marques", getUsername, verifyAuthentication, marquesRoute);
|
routes.use("/marques", getUsername, verifyAuthentication, marquesRoute);
|
||||||
|
routes.use("/membres", memberRouter);
|
||||||
|
|
||||||
export default routes;
|
export default routes;
|
||||||
|
12
back-end/src/routes/member.route.ts
Normal file
12
back-end/src/routes/member.route.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import express from 'express';
|
||||||
|
import { register, login } from '../controllers/auth.controller';
|
||||||
|
import memberService from '../services/member.service';
|
||||||
|
import memberController from '../controllers/member.controller';
|
||||||
|
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
router.get("/:name", memberController.memberByName);
|
||||||
|
|
||||||
|
router.get("/byid/:id", memberController.memberById);
|
||||||
|
|
||||||
|
export default router;
|
56
back-end/src/services/member.service.ts
Normal file
56
back-end/src/services/member.service.ts
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import { new_client } from '../db/db_client';
|
||||||
|
import { Member, User } from '../types/member';
|
||||||
|
import { Either, eitherLeft, eitherRight } from '../utils/utils';
|
||||||
|
|
||||||
|
const getMember = async (idOrName: number | string): Promise<Either<Member, string>> => {
|
||||||
|
const client = new_client();
|
||||||
|
await client.connect();
|
||||||
|
let res;
|
||||||
|
if (typeof idOrName !== 'number') {
|
||||||
|
res = await client.query("SELECT * FROM membres WHERE nom_membre=$1;", [`${idOrName}`]);
|
||||||
|
} else {
|
||||||
|
res = await client.query("SELECT * FROM membres WHERE id_membre=$1;", [idOrName]);
|
||||||
|
}
|
||||||
|
if (res.rows.length === 0) {
|
||||||
|
await client.end();
|
||||||
|
return eitherRight<Member, string>("Does not exist.");
|
||||||
|
}
|
||||||
|
const member: Member = { id_member: res.rows[0].id_membre, name: res.rows[0].nom_membre, password: res.rows[0].mdp_membre };
|
||||||
|
await client.end();
|
||||||
|
|
||||||
|
return eitherLeft<Member, string>(member);
|
||||||
|
}
|
||||||
|
|
||||||
|
const createMember = async (name: string, passwd: string): Promise<Either<Member, string>> => {
|
||||||
|
const gettingMember = await getMember(name);
|
||||||
|
if (!gettingMember.hasRight) {
|
||||||
|
return eitherRight<Member, string>("Already in database.");
|
||||||
|
}
|
||||||
|
const client = new_client();
|
||||||
|
await client.connect();
|
||||||
|
const res = await client.query("INSERT INTO membres (nom_membre, mdp_membre) VALUES ($1, $2) RETURNING *;", [`${name}`, `${passwd}`]);
|
||||||
|
if (res.rows.length === 0) {
|
||||||
|
await client.end();
|
||||||
|
return eitherRight<Member, string>("Something went wrong");
|
||||||
|
}
|
||||||
|
const member: Member = { id_member: res.rows[0].id_membre, name: res.rows[0].nom_membre, password: res.rows[0].mdp_membre };
|
||||||
|
await client.end();
|
||||||
|
return eitherLeft<Member, string>(member);
|
||||||
|
}
|
||||||
|
|
||||||
|
const getDefaultUser = (): User => ({ id_member: -1, name: "unknown" });
|
||||||
|
const getDefaultMember = (): Member => ({ id_member: -1, name: "unknown", password: "none" });
|
||||||
|
|
||||||
|
function userAdapter(member: Member): User {
|
||||||
|
return { id_member: member.id_member, name: member.name };
|
||||||
|
}
|
||||||
|
|
||||||
|
const memberService = {
|
||||||
|
getMember,
|
||||||
|
createMember,
|
||||||
|
getDefaultUser,
|
||||||
|
getDefaultMember,
|
||||||
|
userAdapter,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default memberService;
|
12
back-end/src/templates/member.ejs
Normal file
12
back-end/src/templates/member.ejs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title><%= member.name %></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1><%= member.name %></h1>
|
||||||
|
<h2>id: <%= member.id_member%></h2>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
x
Reference in New Issue
Block a user