feat: add pieces per model
This commit is contained in:
parent
8cda756f6d
commit
a540c522f9
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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 };
|
||||
|
Loading…
x
Reference in New Issue
Block a user