This commit is contained in:
Nemo D'ACREMONT 2024-12-04 12:36:52 +01:00
parent aba7562d91
commit 1577817111
No known key found for this signature in database
GPG Key ID: 6E5BCE8022FA8276
5 changed files with 57 additions and 12 deletions

View File

@ -29,7 +29,7 @@ app.use(morgan(log_format));
// Defines endpoints // Defines endpoints
app.use(routes); app.use(routes);
process.on('*', (e) => { process.on('uncaughtException', (e) => {
console.error(`Unhandled error catched: ${e}`); console.error(`Unhandled error catched: ${e}`);
}); });

View File

@ -6,6 +6,7 @@ import { Box } from '../types/box'
import { Piece } from '../types/piece' import { Piece } from '../types/piece'
import memberService from "../services/member.service"; import memberService from "../services/member.service";
import modelService from "../services/model.service"; import modelService from "../services/model.service";
import { getBuyedPiecesFromMember } from "../services/pieces.service";
const boxByTitle: RequestHandler<{ title: string; }> = async (req, res) => { const boxByTitle: RequestHandler<{ title: string; }> = async (req, res) => {
const boxEither = await boxService.getBox(req.params.title); const boxEither = await boxService.getBox(req.params.title);
@ -99,23 +100,28 @@ const boxById: RequestHandler<{ id: string; }> = async (req, res) => {
res.render('box.ejs', { box }); res.render('box.ejs', { box });
}; };
const registerBox: RequestHandler<{ id_box: string; id_member: string; quantity: string; }> = async (req, res, next) => { const registerBox: RequestHandler = async (req, res, next) => {
const id_box = parseInt(req.params.id_box); const id_box = parseInt(req.body.id_box);
const id_member = parseInt(req.params.id_member); const id_member = parseInt(req.body.id_member);
const quantity = parseInt(req.params.quantity); const quantity = parseInt(req.body.quantity);
await boxService.registerBox(id_box, id_member, quantity); await boxService.registerBox(id_box, id_member, quantity);
const memberEither = await memberService.getMember(id_member); const memberEither = await memberService.getMember(id_member);
const models = await modelService.getAllBuildableModels(id_member);
if (memberEither.hasRight) { if (memberEither.hasRight) {
console.error(memberEither.right);
next(); next();
return; return;
} }
const member = memberEither.left; const member = memberEither.left;
const models = await modelService.getAllBuildableModels(member.id_member);
const boxes = await boxService.getBoxesFromMember(member.id_member);
const pieces = await getBuyedPiecesFromMember(member.id_member);
const allboxes = await boxService.getAllBoxes();
res.render('member.ejs', { member, models }); res.render('member.ejs', { member, models, boxes, pieces, allboxes });
}; };
const boxController = { const boxController = {

View File

@ -16,8 +16,9 @@ const memberByName: RequestHandler<{ name: string; }> = async (req, res) => {
const models = await modelService.getAllBuildableModels(member.id_member); const models = await modelService.getAllBuildableModels(member.id_member);
const boxes = await boxService.getBoxesFromMember(member.id_member); const boxes = await boxService.getBoxesFromMember(member.id_member);
const pieces = await getBuyedPiecesFromMember(member.id_member); const pieces = await getBuyedPiecesFromMember(member.id_member);
const allboxes = await boxService.getAllBoxes();
res.render('member.ejs', { member, models, boxes, pieces }); res.render('member.ejs', { member, models, boxes, pieces, allboxes });
}; };
const allMembers: RequestHandler = async (_req, res) => { const allMembers: RequestHandler = async (_req, res) => {
@ -43,8 +44,9 @@ const memberById: RequestHandler<{ id: string; }> = async (req, res) => {
const models = await modelService.getAllBuildableModels(member.id_member); const models = await modelService.getAllBuildableModels(member.id_member);
const boxes = await boxService.getBoxesFromMember(member.id_member); const boxes = await boxService.getBoxesFromMember(member.id_member);
const pieces = await getBuyedPiecesFromMember(member.id_member); const pieces = await getBuyedPiecesFromMember(member.id_member);
const allboxes = await boxService.getAllBoxes();
res.render('member.ejs', { member, models, boxes, pieces }); res.render('member.ejs', { member, models, boxes, pieces, allboxes });
}; };
const memberController = { const memberController = {

View File

@ -53,6 +53,7 @@ async function getBoxesFromMember(id_member: number): Promise<Array<Pair<Box, nu
const client = new_client() const client = new_client()
const res = await client.query(`SELECT id_boite, quantite_enregistrer FROM enregistrer WHERE id_membre = $1;`, [id_member]) const res = await client.query(`SELECT id_boite, quantite_enregistrer FROM enregistrer WHERE id_membre = $1;`, [id_member])
const arr: Array<Pair<Box, number>> = new Array(); const arr: Array<Pair<Box, number>> = new Array();
for (let index = 0; index < res.rows.length; index++) { for (let index = 0; index < res.rows.length; index++) {
const box: Either<Box, string> = await getBox(res.rows[index]['id_boite']); const box: Either<Box, string> = await getBox(res.rows[index]['id_boite']);
if (box.hasRight) if (box.hasRight)
@ -115,7 +116,14 @@ const getAllBoxesFromDate = async (date: Date) => {
const registerBox = async (id_box: number, id_member: number, quantity: number) => { const registerBox = async (id_box: number, id_member: number, quantity: number) => {
const client = new_client(); const client = new_client();
client.query("INSERT INTO enregistrer ($1, $2, $3);", [id_box, id_member, quantity]); const boxes = await boxService.getBoxesFromMember(id_member);
if (boxes.map(el => el.first).find(el => el.id == id_box)) {
const qty = await client.query("SELECT quantite_enregistrer FROM enregistrer WHERE id_boite=$1 AND id_membre=$2;", [id_box, id_member]);
await client.query("UPDATE enregistrer SET quantite_enregistrer=$3 WHERE id_boite=$1 AND id_membre=$2;", [id_box, id_member, qty.rows[0].quantite_enregistrer + quantity]);
}
else
await client.query("INSERT INTO enregistrer VALUES($1, $2, $3);", [id_box, id_member, quantity]);
} }
const boxService = { const boxService = {

View File

@ -9,6 +9,19 @@
</title> </title>
<%- include('partials/links.ejs') %> <%- include('partials/links.ejs') %>
<style>
#box-register-form {
display: flex;
flex-direction: column;
max-width: max(30vw, 60ch);
margin: auto;
}
#box-register-form select, #box-register-form input {
padding: .5rem 1rem;
}
</style>
</head> </head>
<body> <body>
@ -25,13 +38,29 @@
<pre> <pre>
id: <%= member.id_member%> id: <%= member.id_member%>
name: <%= member.name%> name: <%= member.name%>
</pre> </pre>
<h2>Liste des boites enregistrées</h2> <h2>Liste des boites enregistrées</h2>
<form name="title" action="/boxes/register" id="box-register-form" method="POST">
<input type="hidden" name="id_member" id="id_member" value="<%= member.id_member %>">
<label for="id_box">id de la boite</label>
<select name="id_box" id="id_box">
<% allboxes.forEach(function(box) { %>
<option value="<%=box.id%>"><%=box.id%></option>
<% }); %>
</select>
<label for="quantity">Quantité</label>
<input type="number" name="quantity" min="0" step="1" id="quantity">
<input type="submit" value="Ajouter">
</form>
<div class="table"> <div class="table">
<table> <table>
<thead> <thead>
<tr> <tr>