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 { new_client } from '../db/db_client';
import { Model } from '../types/model'; 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 = { type DBModel = {
id_modele: number; id_modele: number;
@ -10,13 +12,27 @@ type DBModel = {
id_modele_2: number; 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 = { const model: Model = {
id: data.id_modele, id: data.id_modele,
name: data.nom_modele, name: data.nom_modele,
url: data.url_notice_modele, url: data.url_notice_modele,
creator: data.id_membre, creator: data.id_membre,
inheritFrom: data.id_modele_2, inheritFrom: data.id_modele_2,
pieces: await getPiecesFromModel(data.id_modele)
}; };
return model; return model;
@ -33,7 +49,7 @@ const getModel = async (idOrName: number | string): Promise<Either<Model, string
if (res.rows.length === 0) { if (res.rows.length === 0) {
return eitherRight<Model, string>("Does not exist."); 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); return eitherLeft<Model, string>(model);
} }
@ -42,8 +58,8 @@ const getAllModels = async () => {
const client = new_client(); const client = new_client();
const res = await client.query("SELECT * FROM modeles"); const res = await client.query("SELECT * FROM modeles");
console.log("he");
return res.rows.map(db2Model); return Promise.all(res.rows.map(async (el) => { return await db2Model(el) }));
} }
const getAllModelsFromFans = async () => { const getAllModelsFromFans = async () => {
@ -53,7 +69,7 @@ const getAllModelsFromFans = async () => {
"SELECT * FROM modeles WHERE id_membre IS NOT NULL" "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) => { const getAllBuildableModels = async (id_member: number) => {
@ -64,7 +80,7 @@ const getAllBuildableModels = async (id_member: number) => {
[id_member] [id_member]
); );
return res.rows.map(db2Model); return Promise.all(res.rows.map(async (el) => { return await db2Model(el) }));
} }
const getAllModelsByNote = async () => { 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;" "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>> => { 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) { if (res.rows.length === 0) {
return eitherRight<Model, string>("Something went wrong"); 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); return eitherLeft<Model, string>(model);
} }

View File

@ -21,6 +21,14 @@
url : <%= model.url %> url : <%= model.url %>
creator : <%= model.creator %> creator : <%= model.creator %>
inheritFrom : <%= model.inheritFrom %> 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> </pre>
</body> </body>

View File

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