feat: add page to list all members
This commit is contained in:
parent
f5026498b1
commit
5d4b107a00
@ -14,6 +14,11 @@ const memberByName: RequestHandler<{ name: string; }> = async (req, res) => {
|
|||||||
res.render('member.ejs', { member });
|
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 memberById: RequestHandler<{ id: string; }> = async (req, res) => {
|
||||||
const id = parseInt(req.params.id);
|
const id = parseInt(req.params.id);
|
||||||
const memberEither = await memberService.getMember(id);
|
const memberEither = await memberService.getMember(id);
|
||||||
@ -31,6 +36,7 @@ const memberById: RequestHandler<{ id: string; }> = async (req, res) => {
|
|||||||
const memberController = {
|
const memberController = {
|
||||||
memberByName,
|
memberByName,
|
||||||
memberById,
|
memberById,
|
||||||
|
allMembers,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default memberController;
|
export default memberController;
|
||||||
|
@ -5,6 +5,8 @@ import memberController from '../controllers/member.controller';
|
|||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
|
router.get("/", memberController.allMembers);
|
||||||
|
|
||||||
router.get("/:name", memberController.memberByName);
|
router.get("/:name", memberController.memberByName);
|
||||||
|
|
||||||
router.get("/byid/:id", memberController.memberById);
|
router.get("/byid/:id", memberController.memberById);
|
||||||
|
@ -2,47 +2,70 @@ import { new_client } from '../db/db_client';
|
|||||||
import { Member, User } from '../types/member';
|
import { Member, User } from '../types/member';
|
||||||
import { Either, eitherLeft, eitherRight } from '../utils/utils';
|
import { Either, eitherLeft, eitherRight } from '../utils/utils';
|
||||||
|
|
||||||
const getMember = async (idOrName: number | string): Promise<Either<Member, string>> => {
|
type DBMembre = {
|
||||||
const client = new_client();
|
id_membre: number;
|
||||||
await client.connect();
|
nom_membre: string;
|
||||||
let res;
|
mdp_membre: string;
|
||||||
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);
|
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 createMember = async (name: string, passwd: string): Promise<Either<Member, string>> => {
|
||||||
const gettingMember = await getMember(name);
|
const gettingMember = await getMember(name);
|
||||||
if (!gettingMember.hasRight) {
|
if (!gettingMember.hasRight) {
|
||||||
return eitherRight<Member, string>("Already in database.");
|
return eitherRight<Member, string>("Already in database.");
|
||||||
}
|
}
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
await client.connect();
|
||||||
const res = await client.query("INSERT INTO membres (nom_membre, mdp_membre) VALUES ($1, $2) RETURNING *;", [`${name}`, `${passwd}`]);
|
const res = await client.query("INSERT INTO membres (nom_membre, mdp_membre) VALUES ($1, $2) RETURNING *;", [`${name}`, `${passwd}`]);
|
||||||
if (res.rows.length === 0) {
|
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();
|
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 getDefaultUser = (): User => ({ id_member: -1, name: "unknown" });
|
||||||
const getDefaultMember = (): Member => ({ id_member: -1, name: "unknown", password: "none" });
|
const getDefaultMember = (): Member => ({ id_member: -1, name: "unknown", password: "none" });
|
||||||
|
|
||||||
function userAdapter(member: Member): User {
|
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 = {
|
const memberService = {
|
||||||
@ -51,6 +74,7 @@ const memberService = {
|
|||||||
getDefaultUser,
|
getDefaultUser,
|
||||||
getDefaultMember,
|
getDefaultMember,
|
||||||
userAdapter,
|
userAdapter,
|
||||||
|
getAllMembers,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default memberService;
|
export default memberService;
|
||||||
|
27
back-end/src/templates/members.ejs
Normal file
27
back-end/src/templates/members.ejs
Normal 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>
|
Loading…
x
Reference in New Issue
Block a user