feat: add pieces per model

This commit is contained in:
Alessandre Laguierce 2024-12-03 11:49:55 +01:00
parent 8cda756f6d
commit a540c522f9
3 changed files with 37 additions and 9 deletions

View File

@ -1,6 +1,8 @@
import { new_client } from '../db/db_client';
import { Model } from '../types/model';
import { Either, eitherLeft, eitherRight } from '../utils/utils';
import { Either, eitherLeft, eitherRight, Pair, createPair } from '../utils/utils';
import { Piece } from '../types/piece';
import { getPiece } from './pieces.service';
type DBModel = {
id_modele: number;
@ -10,13 +12,27 @@ type DBModel = {
id_modele_2: number;
};
function db2Model(data: DBModel) {
async function getPiecesFromModel(id_model: number): Promise<Array<Pair<Piece, number>>> {
const client = new_client();
const res = await client.query(`SELECT * FROM necessiter WHERE id_modele = $1;`, [ id_model ]);
const arr: Array<Pair<Piece, number>> = new Array();
for (let i = 0; i < res.rows.length; ++i) {
const piece: Either<Piece, string> = await getPiece(res.rows[i]['id_piece']);
if (piece.hasRight)
continue;
arr.push(createPair(piece.left, res.rows[i]['quantite_necessiter'] as number));
}
return arr;
}
async function db2Model(data: DBModel) {
const model: Model = {
id: data.id_modele,
name: data.nom_modele,
url: data.url_notice_modele,
creator: data.id_membre,
inheritFrom: data.id_modele_2,
pieces: await getPiecesFromModel(data.id_modele)
};
return model;
@ -33,7 +49,7 @@ const getModel = async (idOrName: number | string): Promise<Either<Model, string
if (res.rows.length === 0) {
return eitherRight<Model, string>("Does not exist.");
}
const model = db2Model(res.rows[0]);
const model = await db2Model(res.rows[0]);
return eitherLeft<Model, string>(model);
}
@ -42,8 +58,8 @@ const getAllModels = async () => {
const client = new_client();
const res = await client.query("SELECT * FROM modeles");
return res.rows.map(db2Model);
console.log("he");
return Promise.all(res.rows.map(async (el) => { return await db2Model(el) }));
}
const getAllModelsFromFans = async () => {
@ -53,7 +69,7 @@ const getAllModelsFromFans = async () => {
"SELECT * FROM modeles WHERE id_membre IS NOT NULL"
);
return res.rows.map(db2Model);
return Promise.all(res.rows.map(async (el) => { return await db2Model(el) }));
}
const getAllBuildableModels = async (id_member: number) => {
@ -64,7 +80,7 @@ const getAllBuildableModels = async (id_member: number) => {
[id_member]
);
return res.rows.map(db2Model);
return Promise.all(res.rows.map(async (el) => { return await db2Model(el) }));
}
const getAllModelsByNote = async () => {
@ -74,7 +90,7 @@ const getAllModelsByNote = async () => {
"SELECT modeles.*, AVG(note_noter) as note_moyenne FROM noter JOIN modeles on noter.id_modele = modeles.id_modele GROUP BY modeles.id_modele ORDER BY note_moyenne DESC;"
);
return res.rows.map(db2Model);
return Promise.all(res.rows.map(async (el) => { return await db2Model(el) }));
}
const createModel = async (name: string, url: string, creator: number, inheritFrom: number): Promise<Either<Model, string>> => {
@ -93,7 +109,7 @@ const createModel = async (name: string, url: string, creator: number, inheritFr
if (res.rows.length === 0) {
return eitherRight<Model, string>("Something went wrong");
}
const model: Model = db2Model(res.rows[0]);
const model: Model = await db2Model(res.rows[0]);
return eitherLeft<Model, string>(model);
}

View File

@ -21,6 +21,14 @@
url : <%= model.url %>
creator : <%= model.creator %>
inheritFrom : <%= model.inheritFrom %>
pièces :
<% model.pieces.forEach(function(pair) { %>
<li>
<a href="/pieces/<%=pair.first.id_piece%>">
n°<%=pair.first.id_piece%> en <%=pair.second%> exemplaires
</a>
</li>
<% }); %>
</pre>
</body>

View File

@ -1,9 +1,13 @@
import { Pair } from '../utils/utils';
import { Piece } from './piece';
type Model = {
id: number;
name: string;
url: string;
creator: number;
inheritFrom: number;
pieces: Array<Pair<Piece, number>>
};
export { Model };