feat: change list modele function functioné

This commit is contained in:
Martin Eyben 2024-12-03 11:57:05 +00:00
parent 30707747dc
commit 5a0b1f1a0f
3 changed files with 58 additions and 62 deletions

View File

@ -14,16 +14,12 @@ $$
LANGUAGE SQL;
;
-- Liste des modèles faisables à partir d'un membre
CREATE OR REPLACE FUNCTION modeles_faisables_membre(int) RETURNS TABLE(
id_modele int ,
nom_modele VARCHAR(255) ,
url_notice_modele VARCHAR(2048) ,
id_membre int , id_modele_etendu int
id_modele int
) AS
$$
SELECT *
SELECT id_modele
FROM modeles
WHERE id_modele not IN
(

View File

@ -4,36 +4,36 @@ import { Model } from '../types/model';
import { Either, eitherLeft, eitherRight } from '../utils/utils';
type DBMembre = {
id_membre: number;
nom_membre: string;
mdp_membre: string;
id_membre: number;
nom_membre: string;
mdp_membre: string;
};
type DBMembreAndNbModels = {
id_membre: number;
nom_membre: string;
mdp_membre: string;
nb_modele: number;
id_membre: number;
nom_membre: string;
mdp_membre: string;
nb_modele: number;
};
function db2member(data: DBMembre): Member {
const member: Member = {
id_member: data.id_membre,
name: data.nom_membre,
password: data.mdp_membre,
};
return member;
const member: Member = {
id_member: data.id_membre,
name: data.nom_membre,
password: data.mdp_membre,
};
return member;
}
function db2memberAndNbModels(data: DBMembreAndNbModels): MemberAndNbModels {
const memberAndNbModels: MemberAndNbModels = {
id_member: data.id_membre,
name: data.nom_membre,
password: data.mdp_membre,
nb_models: data.nb_modele,
};
const memberAndNbModels: MemberAndNbModels = {
id_member: data.id_membre,
name: data.nom_membre,
password: data.mdp_membre,
nb_models: data.nb_modele,
};
return memberAndNbModels;
return memberAndNbModels;
}
const getMember = async (idOrName: number | string): Promise<Either<Member, string>> => {
@ -86,13 +86,13 @@ function userAdapter(member: Member): User {
}
const memberService = {
getMember,
createMember,
getDefaultUser,
getDefaultMember,
userAdapter,
getAllMembers,
getAllMembersByNbModels,
getMember,
createMember,
getDefaultUser,
getDefaultMember,
userAdapter,
getAllMembers,
getAllMembersByNbModels,
};
export default memberService;

View File

@ -5,16 +5,16 @@ import { Piece } from '../types/piece';
import { getPiece } from './pieces.service';
type DBModel = {
id_modele: number;
nom_modele: string;
url_notice_modele: string;
id_membre: number;
id_modele_2: number;
id_modele: number;
nom_modele: string;
url_notice_modele: string;
id_membre: number;
id_modele_2: number;
};
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 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']);
@ -26,16 +26,16 @@ async function getPiecesFromModel(id_model: number): Promise<Array<Pair<Piece, n
}
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,
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;
return model;
}
const getModel = async (idOrName: number | string): Promise<Either<Model, string>> => {
@ -66,8 +66,8 @@ const getAllModelsFromFans = async () => {
const client = new_client();
const res = await client.query(
"SELECT * FROM modeles WHERE id_membre IS NOT NULL"
);
"SELECT * FROM modeles WHERE id_membre IS NOT NULL"
);
return Promise.all(res.rows.map(async (el) => { return await db2Model(el) }));
}
@ -76,9 +76,9 @@ const getAllBuildableModels = async (id_member: number) => {
const client = new_client();
const res = await client.query(
"SELECT modeles_faisables_membre($1)",
[id_member]
);
"SELECT * FROM modeles WHERE id_modele in (SELECT id_modele FROM modeles_faisables_membre($1))",
[id_member]
);
return Promise.all(res.rows.map(async (el) => { return await db2Model(el) }));
}
@ -87,8 +87,8 @@ const getAllModelsByNote = async () => {
const client = new_client();
const res = await client.query(
"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 Promise.all(res.rows.map(async (el) => { return await db2Model(el) }));
}
@ -100,11 +100,11 @@ const createModel = async (name: string, url: string, creator: number, inheritFr
}
const client = new_client();
const res = await client.query(
"INSERT INTO modeles \
"INSERT INTO modeles \
(nom_modele, url_notice_modele, id_membre, id_modele_2) \
VALUES ($1, $2, $3, $4) \
RETURNING *;",
[`${name}`, `${url}`, `${creator}`, `${inheritFrom}`]);
[`${name}`, `${url}`, `${creator}`, `${inheritFrom}`]);
if (res.rows.length === 0) {
return eitherRight<Model, string>("Something went wrong");
@ -114,12 +114,12 @@ const createModel = async (name: string, url: string, creator: number, inheritFr
}
const modelService = {
getModel,
getAllModels,
createModel,
getAllModelsFromFans,
getAllModelsByNote,
getAllBuildableModels,
getModel,
getAllModels,
createModel,
getAllModelsFromFans,
getAllModelsByNote,
getAllBuildableModels,
};
export default modelService;