feat: add review on model listing

This commit is contained in:
Martin Eyben 2024-12-03 19:28:58 +00:00
parent e54159b323
commit e5e73777cc
4 changed files with 22 additions and 4 deletions

View File

@ -385,6 +385,13 @@ CREATE OR REPLACE VIEW nb_modele_par_membre AS
GROUP BY membres.id_membre GROUP BY membres.id_membre
); );
-- Note avis des modeles avec le nombre d'avis
CREATE OR REPLACE VIEW modele_by_note AS
SELECT modeles.id_modele as id_modele, coalesce(AVG(note_noter), 0)::NUMERIC(5,2) as note, COUNT(note_noter) as nb_avis
FROM modeles
LEFT OUTER JOIN noter
ON noter.id_modele = modeles.id_modele
GROUP BY modeles.id_modele;
-- ============================================================================ -- ============================================================================
-- Triggers. -- Triggers.
-- ============================================================================ -- ============================================================================

View File

@ -25,6 +25,13 @@ async function getPiecesFromModel(id_model: number): Promise<Array<Pair<Piece, n
return arr; return arr;
} }
async function getNoteFromModel(id_model: number): Promise<Pair<number, number>> {
const client = new_client();
const res = await client.query(`SELECT * FROM modele_by_note WHERE id_modele = $1;`, [id_model]);
return createPair(res.rows[0]['note'], res.rows[0]['nb_avis']);
}
async function db2Model(data: DBModel) { async function db2Model(data: DBModel) {
const model: Model = { const model: Model = {
id: data.id_modele, id: data.id_modele,
@ -32,7 +39,8 @@ async function db2Model(data: DBModel) {
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) pieces: await getPiecesFromModel(data.id_modele),
review: await getNoteFromModel(data.id_modele),
}; };
return model; return model;

View File

@ -24,6 +24,7 @@
<th>Id modèle</th> <th>Id modèle</th>
<th>Nom modèle</th> <th>Nom modèle</th>
<th>Proposé par</th> <th>Proposé par</th>
<th>Avis</th>
<th></th> <th></th>
</tr> </tr>
</thead> </thead>
@ -33,6 +34,7 @@
<td><%=model.id%></td> <td><%=model.id%></td>
<td><%=model.name%></td> <td><%=model.name%></td>
<td><a href="/membres/byid/<%=model.creator%>"><i class="fa-solid fa-user"></i> <%=model.creator%></a></td> <td><a href="/membres/byid/<%=model.creator%>"><i class="fa-solid fa-user"></i> <%=model.creator%></a></td>
<td><%=model.review.first%>/5 (<%=model.review.second%> avis)</td>
<td><a href="/models/byname/<%=model.name%>"><i class="fa-solid fa-eye"></i></a></td> <td><a href="/models/byname/<%=model.name%>"><i class="fa-solid fa-eye"></i></a></td>
</tr> </tr>

View File

@ -4,10 +4,11 @@ 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>> pieces: Array<Pair<Piece, number>>
review: Pair<number, number>
}; };
export { Model }; export { Model };