feat: add page to list all members

This commit is contained in:
Nemo D'ACREMONT 2024-11-10 17:06:59 +01:00
parent f5026498b1
commit 5d4b107a00
No known key found for this signature in database
GPG Key ID: 6E5BCE8022FA8276
4 changed files with 89 additions and 30 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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<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();
type DBMembre = {
id_membre: number;
nom_membre: string;
mdp_membre: string;
};
return eitherLeft<Member, string>(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<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 = db2member(res.rows[0]);
await client.end();
return eitherLeft<Member, string>(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<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 };
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 eitherLeft<Member, string>(member);
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 };
return { id_member: member.id_member, name: member.name };
}
const memberService = {
@ -51,6 +74,7 @@ const memberService = {
getDefaultUser,
getDefaultMember,
userAdapter,
getAllMembers,
};
export default memberService;

View File

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
Liste des membres
</title>
</head>
<body>
<h1>
Liste des membres
</h1>
<ul>
<% members.forEach(function(member) { %>
<li>
<a href="/membres/<%=member.name%>">
<%=member.name%>
</a>
</li>
<% }); %>
</ul>
</body>
</html>