diff --git a/back-end/src/services/model.service.ts b/back-end/src/services/model.service.ts index 11ebda1..e173380 100644 --- a/back-end/src/services/model.service.ts +++ b/back-end/src/services/model.service.ts @@ -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>> { + const client = new_client(); + const res = await client.query(`SELECT * FROM necessiter WHERE id_modele = $1;`, [ id_model ]); + const arr: Array> = new Array(); + for (let i = 0; i < res.rows.length; ++i) { + const piece: Either = 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("Does not exist."); } - const model = db2Model(res.rows[0]); + const model = await db2Model(res.rows[0]); return eitherLeft(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> => { @@ -93,7 +109,7 @@ const createModel = async (name: string, url: string, creator: number, inheritFr if (res.rows.length === 0) { return eitherRight("Something went wrong"); } - const model: Model = db2Model(res.rows[0]); + const model: Model = await db2Model(res.rows[0]); return eitherLeft(model); } diff --git a/back-end/src/templates/model.ejs b/back-end/src/templates/model.ejs index 81e1d2b..210f87a 100644 --- a/back-end/src/templates/model.ejs +++ b/back-end/src/templates/model.ejs @@ -21,6 +21,14 @@ url : <%= model.url %> creator : <%= model.creator %> inheritFrom : <%= model.inheritFrom %> + pièces : + <% model.pieces.forEach(function(pair) { %> +
  • + + n°<%=pair.first.id_piece%> en <%=pair.second%> exemplaires + +
  • + <% }); %> diff --git a/back-end/src/types/model.ts b/back-end/src/types/model.ts index c7e5d7a..0fbdf16 100644 --- a/back-end/src/types/model.ts +++ b/back-end/src/types/model.ts @@ -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> }; export { Model };