From 5d4b107a00c47e543b7245007616ccc879462af3 Mon Sep 17 00:00:00 2001 From: Nemo D'ACREMONT Date: Sun, 10 Nov 2024 17:06:59 +0100 Subject: [PATCH] feat: add page to list all members --- back-end/src/controllers/member.controller.ts | 6 ++ back-end/src/routes/member.route.ts | 2 + back-end/src/services/member.service.ts | 84 ++++++++++++------- back-end/src/templates/members.ejs | 27 ++++++ 4 files changed, 89 insertions(+), 30 deletions(-) create mode 100644 back-end/src/templates/members.ejs diff --git a/back-end/src/controllers/member.controller.ts b/back-end/src/controllers/member.controller.ts index 7022fcf..14d6349 100644 --- a/back-end/src/controllers/member.controller.ts +++ b/back-end/src/controllers/member.controller.ts @@ -14,6 +14,11 @@ const memberByName: RequestHandler<{ name: string; }> = async (req, res) => { res.render('member.ejs', { member }); }; +const allMembers: RequestHandler<{ name: string; }> = async (req, res) => { + const members = await memberService.getAllMembers(); + res.render('members.ejs', { members }); +}; + const memberById: RequestHandler<{ id: string; }> = async (req, res) => { const id = parseInt(req.params.id); const memberEither = await memberService.getMember(id); @@ -31,6 +36,7 @@ const memberById: RequestHandler<{ id: string; }> = async (req, res) => { const memberController = { memberByName, memberById, + allMembers, }; export default memberController; diff --git a/back-end/src/routes/member.route.ts b/back-end/src/routes/member.route.ts index e923a83..a852819 100644 --- a/back-end/src/routes/member.route.ts +++ b/back-end/src/routes/member.route.ts @@ -5,6 +5,8 @@ import memberController from '../controllers/member.controller'; const router = express.Router(); +router.get("/", memberController.allMembers); + router.get("/:name", memberController.memberByName); router.get("/byid/:id", memberController.memberById); diff --git a/back-end/src/services/member.service.ts b/back-end/src/services/member.service.ts index d5b1cce..f564c2d 100644 --- a/back-end/src/services/member.service.ts +++ b/back-end/src/services/member.service.ts @@ -2,47 +2,70 @@ 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(); +type DBMembre = { + id_membre: number; + nom_membre: string; + mdp_membre: string; +}; - return eitherLeft(member); +function db2member(data: DBMembre) { + const member: Member = { + id_member: data.id_membre, + name: data.nom_membre, + password: data.mdp_membre, + }; + return member; +} + +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 = db2member(res.rows[0]); + await client.end(); + + return eitherLeft(member); +} + +const getAllMembers = async () => { + const client = new_client(); + await client.connect(); + const res = await client.query("SELECT * FROM membres"); + await client.end(); + return res.rows.map(db2member); } 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 }; + 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 eitherLeft(member); + 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 }; + return { id_member: member.id_member, name: member.name }; } const memberService = { @@ -51,6 +74,7 @@ const memberService = { getDefaultUser, getDefaultMember, userAdapter, + getAllMembers, }; export default memberService; diff --git a/back-end/src/templates/members.ejs b/back-end/src/templates/members.ejs new file mode 100644 index 0000000..abbcd02 --- /dev/null +++ b/back-end/src/templates/members.ejs @@ -0,0 +1,27 @@ + + + + + + + Liste des membres + + + +

+ Liste des membres +

+ + + + + +