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; LANGUAGE SQL;
; ;
-- Liste des modèles faisables à partir d'un membre -- Liste des modèles faisables à partir d'un membre
CREATE OR REPLACE FUNCTION modeles_faisables_membre(int) RETURNS TABLE( CREATE OR REPLACE FUNCTION modeles_faisables_membre(int) RETURNS TABLE(
id_modele int , id_modele int
nom_modele VARCHAR(255) ,
url_notice_modele VARCHAR(2048) ,
id_membre int , id_modele_etendu int
) AS ) AS
$$ $$
SELECT * SELECT id_modele
FROM modeles FROM modeles
WHERE id_modele not IN WHERE id_modele not IN
( (

View File

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

View File

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