From f1d41e6960cac5630c77fa2333e9a0f49c824e91 Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 8 Nov 2024 11:44:26 +0100 Subject: [PATCH 1/4] refactor: move db request to member.service.ts --- back-end/src/controllers/member.controller.ts | 48 ---------------- back-end/src/services/member.service.ts | 56 +++++++++++++++++++ 2 files changed, 56 insertions(+), 48 deletions(-) create mode 100644 back-end/src/services/member.service.ts diff --git a/back-end/src/controllers/member.controller.ts b/back-end/src/controllers/member.controller.ts index 5b89c25..e69de29 100644 --- a/back-end/src/controllers/member.controller.ts +++ b/back-end/src/controllers/member.controller.ts @@ -1,48 +0,0 @@ -import { new_client } from '../db/db_client'; -import { Member, User } from '../types/member'; -import { Either, eitherLeft, eitherRight } from '../utils/utils'; - -const getDefaultUser = (): User => ({ id_member: -1, name: "unknown" }); -const getDefaultMember = (): Member => ({ id_member: -1, name: "unknown", password: "none" }); - -const getMember = async (idOrName: number | string): Promise> => { - 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("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); -} - -const createMember = async (name: string, passwd: string): Promise> => { - const gettingMember = await getMember(name); - if (!gettingMember.hasRight) { - return eitherRight("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("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); -} - -function userAdapter(member: Member): User { - return { id_member: member.id_member, name: member.name }; -} - -export { getDefaultUser, getDefaultMember, getMember, createMember, userAdapter }; diff --git a/back-end/src/services/member.service.ts b/back-end/src/services/member.service.ts new file mode 100644 index 0000000..d5b1cce --- /dev/null +++ b/back-end/src/services/member.service.ts @@ -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> => { + 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("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); +} + +const createMember = async (name: string, passwd: string): Promise> => { + const gettingMember = await getMember(name); + if (!gettingMember.hasRight) { + return eitherRight("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("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); +} + +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; From 061ec56e720c892f255a653b454df752ebe57696 Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 8 Nov 2024 11:45:42 +0100 Subject: [PATCH 2/4] refactor: use memberService module in controllers --- back-end/src/controllers/auth.controller.ts | 10 +++++----- back-end/src/middlewares/auth.middleware.ts | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/back-end/src/controllers/auth.controller.ts b/back-end/src/controllers/auth.controller.ts index 0bb776b..ff825e5 100644 --- a/back-end/src/controllers/auth.controller.ts +++ b/back-end/src/controllers/auth.controller.ts @@ -3,7 +3,7 @@ import bcrypt from 'bcrypt'; import { SignJWT } from 'jose'; import { JWT_ISSUER, JWT_AUDIENCE, JWT_SECRET, JWT_EXPIRATION, JWT_SECRET_KEY } from '../config/auth.config'; 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'; const register = (req: Request, res: Response) => { @@ -22,7 +22,7 @@ const register = (req: Request, res: Response) => { res.status(500).send(); return; } - const member: Either = await createMember(name, hash); + const member: Either = await memberService.createMember(name, hash); if (member.hasRight) { res.status(401).send(member.right); return; @@ -33,7 +33,7 @@ const register = (req: Request, res: Response) => { .setIssuer(JWT_ISSUER) .setExpirationTime(JWT_EXPIRATION) .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; } const name: string = req.body.name; - const member: Either = await getMember(name); + const member: Either = await memberService.getMember(name); if (member.hasRight) { res.send(member.right).send(); return; @@ -64,7 +64,7 @@ const login = async (req: Request, res: Response) => { .setIssuer(JWT_ISSUER) .setExpirationTime(JWT_EXPIRATION) .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}); }); }; diff --git a/back-end/src/middlewares/auth.middleware.ts b/back-end/src/middlewares/auth.middleware.ts index 2639a78..dd06d92 100644 --- a/back-end/src/middlewares/auth.middleware.ts +++ b/back-end/src/middlewares/auth.middleware.ts @@ -1,7 +1,7 @@ import { Request, Response } from 'express'; import { jwtVerify } from 'jose'; 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 { Either } from '../utils/utils'; @@ -20,7 +20,7 @@ const getUsername = async (req: Request, res: Response, next: () => void) => { try { const { payload } = await jwtVerify(token, JWT_SECRET_KEY); const name: string = payload.name as string; - const member: Either = await getMember(name); + const member: Either = await memberService.getMember(name); if (!member.hasRight) { res.locals.user = { From 6a173d52f573deb5040b4a4d8410680549956aca Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 8 Nov 2024 11:51:39 +0100 Subject: [PATCH 3/4] feat: add members controllers --- back-end/src/controllers/member.controller.ts | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/back-end/src/controllers/member.controller.ts b/back-end/src/controllers/member.controller.ts index e69de29..9d89da4 100644 --- a/back-end/src/controllers/member.controller.ts +++ b/back-end/src/controllers/member.controller.ts @@ -0,0 +1,36 @@ +import { RequestHandler } from "express"; +import memberService from "../services/member.service"; + +const memberByName: RequestHandler<{name: string;}> = async (req, res) => { + const memberEither = await memberService.getMember(req.params.name); + + if (memberEither.hasRight) { + res.sendStatus(404); + return; + } + + const member = memberEither.left; + + res.render('member.ejs', { member }); +}; + +const memberById: RequestHandler<{id: string;}> = async (req, res) => { + const id = parseInt(req.params.id); + const memberEither = await memberService.getMember(id); + + if (memberEither.hasRight) { + res.sendStatus(404); + return; + } + + const member = memberEither.left; + + res.render('member.ejs', { member }); +}; + +const memberController = { + memberByName, + memberById, +}; + +export default memberController; From b2aac76a2ea1e8b7a62672726427aa3890027a86 Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Fri, 8 Nov 2024 11:52:25 +0100 Subject: [PATCH 4/4] feat: add templates and link controllers to routes --- back-end/src/routes/index.ts | 2 ++ back-end/src/routes/member.route.ts | 12 ++++++++++++ back-end/src/templates/member.ejs | 12 ++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 back-end/src/routes/member.route.ts create mode 100644 back-end/src/templates/member.ejs diff --git a/back-end/src/routes/index.ts b/back-end/src/routes/index.ts index 3183206..4ac6e6f 100644 --- a/back-end/src/routes/index.ts +++ b/back-end/src/routes/index.ts @@ -3,6 +3,7 @@ import db from '../db'; import { getUsername, verifyAuthentication } from '../middlewares/auth.middleware' import authRoute from './auth.route' import marquesRoute from './marque.route' +import memberRouter from './member.route' const routes = express.Router(); @@ -18,5 +19,6 @@ routes.get("/message", async (_req, res) => { routes.use("/auth", authRoute); routes.use("/marques", getUsername, verifyAuthentication, marquesRoute); +routes.use("/membres", memberRouter); export default routes; diff --git a/back-end/src/routes/member.route.ts b/back-end/src/routes/member.route.ts new file mode 100644 index 0000000..e923a83 --- /dev/null +++ b/back-end/src/routes/member.route.ts @@ -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; diff --git a/back-end/src/templates/member.ejs b/back-end/src/templates/member.ejs new file mode 100644 index 0000000..f39007a --- /dev/null +++ b/back-end/src/templates/member.ejs @@ -0,0 +1,12 @@ + + + + + + <%= member.name %> + + +

<%= member.name %>

+

id: <%= member.id_member%>

+ +