feat: add buildable models in member.ejs and use pool to get clients
This commit is contained in:
parent
7133308658
commit
56c037745c
@ -18,7 +18,7 @@ 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(id_modele int) AS
|
CREATE OR REPLACE FUNCTION modeles_faisables_membre(int) RETURNS TABLE(id_modele int) AS
|
||||||
$$
|
$$
|
||||||
SELECT id_modele
|
SELECT *
|
||||||
FROM modeles
|
FROM modeles
|
||||||
WHERE id_modele not IN
|
WHERE id_modele not IN
|
||||||
(
|
(
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
import memberService from "../services/member.service";
|
import memberService from "../services/member.service";
|
||||||
|
import modelService from "../services/model.service";
|
||||||
|
|
||||||
const memberByName: RequestHandler<{ name: string; }> = async (req, res) => {
|
const memberByName: RequestHandler<{ name: string; }> = async (req, res) => {
|
||||||
const memberEither = await memberService.getMember(req.params.name);
|
const memberEither = await memberService.getMember(req.params.name);
|
||||||
@ -10,8 +11,9 @@ const memberByName: RequestHandler<{ name: string; }> = async (req, res) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const member = memberEither.left;
|
const member = memberEither.left;
|
||||||
|
const models = await modelService.getAllBuildableModels(member.id_member);
|
||||||
|
|
||||||
res.render('member.ejs', { member });
|
res.render('member.ejs', { member, models });
|
||||||
};
|
};
|
||||||
|
|
||||||
const allMembers: RequestHandler = async (_req, res) => {
|
const allMembers: RequestHandler = async (_req, res) => {
|
||||||
@ -34,8 +36,9 @@ const memberById: RequestHandler<{ id: string; }> = async (req, res) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const member = memberEither.left;
|
const member = memberEither.left;
|
||||||
|
const models = modelService.getAllBuildableModels(member.id_member);
|
||||||
|
|
||||||
res.render('member.ejs', { member });
|
res.render('member.ejs', { member, models });
|
||||||
};
|
};
|
||||||
|
|
||||||
const memberController = {
|
const memberController = {
|
||||||
|
@ -33,7 +33,6 @@ const modelById: RequestHandler<{ id: string; }> = async (req, res) => {
|
|||||||
res.render('model.ejs', { model });
|
res.render('model.ejs', { model });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const allModelsFromFans: RequestHandler = async (_req, res) => {
|
const allModelsFromFans: RequestHandler = async (_req, res) => {
|
||||||
const models = await modelService.getAllModelsFromFans();
|
const models = await modelService.getAllModelsFromFans();
|
||||||
res.render('models.ejs', { models });
|
res.render('models.ejs', { models });
|
||||||
|
@ -14,12 +14,16 @@ console.log(`DB_HOST:\t${db_host}`);
|
|||||||
console.log(`DB_PORT:\t${db_port}`);
|
console.log(`DB_PORT:\t${db_port}`);
|
||||||
console.log("=== END DB CONFIG ===");
|
console.log("=== END DB CONFIG ===");
|
||||||
|
|
||||||
export function new_client() {
|
// doc: https://node-postgres.com/apis/pool
|
||||||
return new pg.Client({
|
const pool_config: pg.PoolConfig = {
|
||||||
user: db_user,
|
user: db_user,
|
||||||
password: db_password,
|
password: db_password,
|
||||||
database: db_name,
|
database: db_name,
|
||||||
host: db_host,
|
host: db_host,
|
||||||
port: db_port,
|
port: db_port,
|
||||||
});
|
}
|
||||||
|
const pool = new pg.Pool(pool_config);
|
||||||
|
|
||||||
|
export function new_client() {
|
||||||
|
return pool
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,9 @@ import { new_client } from './db_client';
|
|||||||
|
|
||||||
async function example_request() {
|
async function example_request() {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
|
|
||||||
const res = await client.query('SELECT $1::text as message', ['Hello world!']);
|
const res = await client.query('SELECT $1::text as message', ['Hello world!']);
|
||||||
const message = res.rows[0].message; // Hello world!
|
const message = res.rows[0].message; // Hello world!
|
||||||
await client.end();
|
|
||||||
|
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,6 @@ type DBBox = {
|
|||||||
|
|
||||||
async function getPiecesFromBox(id_box: number): Promise<Array<Pair<Piece, number>>> {
|
async function getPiecesFromBox(id_box: number): Promise<Array<Pair<Piece, number>>> {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
const res = await client.query(`SELECT * FROM contenir WHERE id_boite = $1;`, [ id_box ]);
|
const res = await client.query(`SELECT * FROM contenir WHERE id_boite = $1;`, [ id_box ]);
|
||||||
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) {
|
||||||
@ -21,22 +20,17 @@ async function getPiecesFromBox(id_box: number): Promise<Array<Pair<Piece, numbe
|
|||||||
continue;
|
continue;
|
||||||
arr.push(createPair(piece.left, res.rows[i]['quantite_contenir'] as number));
|
arr.push(createPair(piece.left, res.rows[i]['quantite_contenir'] as number));
|
||||||
}
|
}
|
||||||
await client.end();
|
|
||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function addPiecesToBox(id_box: number, id_piece: number, qty: number) {
|
async function addPiecesToBox(id_box: number, id_piece: number, qty: number) {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
const res = await client.query(`INSERT INTO contenir (id_boite, id_piece, quantite_contenir) VALUES ($1, $2, $3);`, [ id_box, id_piece, qty ]);
|
const res = await client.query(`INSERT INTO contenir (id_boite, id_piece, quantite_contenir) VALUES ($1, $2, $3);`, [ id_box, id_piece, qty ]);
|
||||||
await client.end();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function removePieceFromBox(id_box: number, id_piece: number) {
|
async function removePieceFromBox(id_box: number, id_piece: number) {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
const res = await client.query(`DELETE FROM contenir WHERE id_boite = $1 AND id_piece = $2;`, [ id_box, id_piece ]);
|
const res = await client.query(`DELETE FROM contenir WHERE id_boite = $1 AND id_piece = $2;`, [ id_box, id_piece ]);
|
||||||
await client.end();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function db2box(data: DBBox): Promise<Box> {
|
async function db2box(data: DBBox): Promise<Box> {
|
||||||
@ -52,7 +46,6 @@ async function db2box(data: DBBox): Promise<Box> {
|
|||||||
|
|
||||||
const getBox = async (idOrTitle: number | string): Promise<Either<Box, string>> => {
|
const getBox = async (idOrTitle: number | string): Promise<Either<Box, string>> => {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
let res;
|
let res;
|
||||||
if (typeof idOrTitle !== 'number') {
|
if (typeof idOrTitle !== 'number') {
|
||||||
res = await client.query("SELECT * FROM boites WHERE titre_boite=$1;", [`${idOrTitle}`]);
|
res = await client.query("SELECT * FROM boites WHERE titre_boite=$1;", [`${idOrTitle}`]);
|
||||||
@ -60,28 +53,23 @@ const getBox = async (idOrTitle: number | string): Promise<Either<Box, string>>
|
|||||||
res = await client.query("SELECT * FROM boites WHERE id_boite=$1;", [idOrTitle]);
|
res = await client.query("SELECT * FROM boites WHERE id_boite=$1;", [idOrTitle]);
|
||||||
}
|
}
|
||||||
if (res.rows.length === 0) {
|
if (res.rows.length === 0) {
|
||||||
await client.end();
|
|
||||||
return eitherRight<Box, string>("Does not exist.");
|
return eitherRight<Box, string>("Does not exist.");
|
||||||
}
|
}
|
||||||
const box = await db2box(res.rows[0]);
|
const box = await db2box(res.rows[0]);
|
||||||
await client.end();
|
|
||||||
|
|
||||||
return eitherLeft<Box, string>(box);
|
return eitherLeft<Box, string>(box);
|
||||||
}
|
}
|
||||||
|
|
||||||
const getAllBoxes = async () => {
|
const getAllBoxes = async () => {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
|
|
||||||
const res = await client.query("SELECT * FROM boites");
|
const res = await client.query("SELECT * FROM boites");
|
||||||
|
|
||||||
await client.end();
|
|
||||||
return await Promise.all(res.rows.map(async (el) => { return await db2box(el) }));
|
return await Promise.all(res.rows.map(async (el) => { return await db2box(el) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
const getAllBoxesFromDate = async (date: Date) => {
|
const getAllBoxesFromDate = async (date: Date) => {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
|
|
||||||
const YYYY = date.getFullYear();
|
const YYYY = date.getFullYear();
|
||||||
const MM = date.getMonth() + 1;
|
const MM = date.getMonth() + 1;
|
||||||
@ -90,7 +78,6 @@ const getAllBoxesFromDate = async (date: Date) => {
|
|||||||
|
|
||||||
const res = await client.query("SELECT * FROM boites WHERE date_boite > $1", [dateString]);
|
const res = await client.query("SELECT * FROM boites WHERE date_boite > $1", [dateString]);
|
||||||
|
|
||||||
await client.end();
|
|
||||||
return await Promise.all(res.rows.map(async (el) => { return await db2box(el) }));
|
return await Promise.all(res.rows.map(async (el) => { return await db2box(el) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ import { Either, eitherLeft, eitherRight } from '../utils/utils';
|
|||||||
|
|
||||||
const getMarque = async (idOrName: number | string): Promise<Either<Marque, string>> => {
|
const getMarque = async (idOrName: number | string): Promise<Either<Marque, string>> => {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
let res;
|
let res;
|
||||||
if (typeof idOrName !== 'number') {
|
if (typeof idOrName !== 'number') {
|
||||||
res = await client.query("SELECT * FROM marques WHERE nom_marque=$1;", [`${idOrName}`]);
|
res = await client.query("SELECT * FROM marques WHERE nom_marque=$1;", [`${idOrName}`]);
|
||||||
@ -13,11 +12,9 @@ const getMarque = async (idOrName: number | string): Promise<Either<Marque, stri
|
|||||||
res = await client.query("SELECT * FROM marques WHERE id_marque=$1;", [idOrName]);
|
res = await client.query("SELECT * FROM marques WHERE id_marque=$1;", [idOrName]);
|
||||||
}
|
}
|
||||||
if (res.rows.length === 0) {
|
if (res.rows.length === 0) {
|
||||||
await client.end();
|
|
||||||
return eitherRight<Marque, string>("Does not exist.");
|
return eitherRight<Marque, string>("Does not exist.");
|
||||||
}
|
}
|
||||||
const marque: Marque = { id_marque: res.rows[0].id_marque, name: res.rows[0].nom_marque };
|
const marque: Marque = { id_marque: res.rows[0].id_marque, name: res.rows[0].nom_marque };
|
||||||
await client.end();
|
|
||||||
|
|
||||||
return eitherLeft<Marque, string>(marque);
|
return eitherLeft<Marque, string>(marque);
|
||||||
}
|
}
|
||||||
@ -28,14 +25,11 @@ const createMarque = async (name: string): Promise<Either<Marque, string>> => {
|
|||||||
return eitherRight<Marque, string>("Already in database.");
|
return eitherRight<Marque, string>("Already in database.");
|
||||||
}
|
}
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
const res = await client.query("INSERT INTO marques (nom_membre) VALUES ($1) RETURNING *;", [`${name}`]);
|
const res = await client.query("INSERT INTO marques (nom_membre) VALUES ($1) RETURNING *;", [`${name}`]);
|
||||||
if (res.rows.length === 0) {
|
if (res.rows.length === 0) {
|
||||||
await client.end();
|
|
||||||
return eitherRight<Marque, string>("Something went wrong");
|
return eitherRight<Marque, string>("Something went wrong");
|
||||||
}
|
}
|
||||||
const marque: Marque = { id_marque: res.rows[0].id_marque, name: res.rows[0].nom_marque };
|
const marque: Marque = { id_marque: res.rows[0].id_marque, name: res.rows[0].nom_marque };
|
||||||
await client.end();
|
|
||||||
return eitherLeft<Marque, string>(marque);
|
return eitherLeft<Marque, string>(marque);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { new_client } from '../db/db_client';
|
import { new_client } from '../db/db_client';
|
||||||
import { Member, MemberAndNbModels, User } from '../types/member';
|
import { Member, MemberAndNbModels, User } from '../types/member';
|
||||||
|
import { Model } from '../types/model';
|
||||||
import { Either, eitherLeft, eitherRight } from '../utils/utils';
|
import { Either, eitherLeft, eitherRight } from '../utils/utils';
|
||||||
|
|
||||||
type DBMembre = {
|
type DBMembre = {
|
||||||
@ -37,7 +38,6 @@ function db2memberAndNbModels(data: DBMembreAndNbModels): MemberAndNbModels {
|
|||||||
|
|
||||||
const getMember = async (idOrName: number | string): Promise<Either<Member, string>> => {
|
const getMember = async (idOrName: number | string): Promise<Either<Member, string>> => {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
let res;
|
let res;
|
||||||
if (typeof idOrName !== 'number') {
|
if (typeof idOrName !== 'number') {
|
||||||
res = await client.query("SELECT * FROM membres WHERE nom_membre=$1;", [`${idOrName}`]);
|
res = await client.query("SELECT * FROM membres WHERE nom_membre=$1;", [`${idOrName}`]);
|
||||||
@ -45,28 +45,22 @@ const getMember = async (idOrName: number | string): Promise<Either<Member, stri
|
|||||||
res = await client.query("SELECT * FROM membres WHERE id_membre=$1;", [idOrName]);
|
res = await client.query("SELECT * FROM membres WHERE id_membre=$1;", [idOrName]);
|
||||||
}
|
}
|
||||||
if (res.rows.length === 0) {
|
if (res.rows.length === 0) {
|
||||||
await client.end();
|
|
||||||
return eitherRight<Member, string>("Does not exist.");
|
return eitherRight<Member, string>("Does not exist.");
|
||||||
}
|
}
|
||||||
const member = db2member(res.rows[0]);
|
const member = db2member(res.rows[0]);
|
||||||
await client.end();
|
|
||||||
|
|
||||||
return eitherLeft<Member, string>(member);
|
return eitherLeft<Member, string>(member);
|
||||||
}
|
}
|
||||||
|
|
||||||
const getAllMembers = async () => {
|
const getAllMembers = async () => {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
const res = await client.query("SELECT * FROM membres");
|
const res = await client.query("SELECT * FROM membres");
|
||||||
await client.end();
|
|
||||||
return res.rows.map(db2member);
|
return res.rows.map(db2member);
|
||||||
}
|
}
|
||||||
|
|
||||||
const getAllMembersByNbModels = async () => {
|
const getAllMembersByNbModels = async () => {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
const res = await client.query("SELECT * FROM nb_modele_par_membre ORDER BY nb_modele DESC LIMIT 5;");
|
const res = await client.query("SELECT * FROM nb_modele_par_membre ORDER BY nb_modele DESC LIMIT 5;");
|
||||||
await client.end();
|
|
||||||
return res.rows.map(db2memberAndNbModels);
|
return res.rows.map(db2memberAndNbModels);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,14 +70,11 @@ const createMember = async (name: string, passwd: string): Promise<Either<Member
|
|||||||
return eitherRight<Member, string>("Already in database.");
|
return eitherRight<Member, string>("Already in database.");
|
||||||
}
|
}
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
const res = await client.query("INSERT INTO membres (nom_membre, mdp_membre) VALUES ($1, $2) RETURNING *;", [`${name}`, `${passwd}`]);
|
const res = await client.query("INSERT INTO membres (nom_membre, mdp_membre) VALUES ($1, $2) RETURNING *;", [`${name}`, `${passwd}`]);
|
||||||
if (res.rows.length === 0) {
|
if (res.rows.length === 0) {
|
||||||
await client.end();
|
|
||||||
return eitherRight<Member, string>("Something went wrong");
|
return eitherRight<Member, string>("Something went wrong");
|
||||||
}
|
}
|
||||||
const member: Member = { id_member: res.rows[0].id_membre, name: res.rows[0].nom_membre, password: res.rows[0].mdp_membre };
|
const member: Member = { id_member: res.rows[0].id_membre, name: res.rows[0].nom_membre, password: res.rows[0].mdp_membre };
|
||||||
await client.end();
|
|
||||||
return eitherLeft<Member, string>(member);
|
return eitherLeft<Member, string>(member);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,6 @@ function db2Model(data: DBModel) {
|
|||||||
|
|
||||||
const getModel = async (idOrName: number | string): Promise<Either<Model, string>> => {
|
const getModel = async (idOrName: number | string): Promise<Either<Model, string>> => {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
let res;
|
let res;
|
||||||
if (typeof idOrName !== 'number') {
|
if (typeof idOrName !== 'number') {
|
||||||
res = await client.query("SELECT * FROM modeles WHERE nom_modele=$1;", [`${idOrName}`]);
|
res = await client.query("SELECT * FROM modeles WHERE nom_modele=$1;", [`${idOrName}`]);
|
||||||
@ -32,47 +31,49 @@ const getModel = async (idOrName: number | string): Promise<Either<Model, string
|
|||||||
res = await client.query("SELECT * FROM modeles WHERE id_modele=$1;", [idOrName]);
|
res = await client.query("SELECT * FROM modeles WHERE id_modele=$1;", [idOrName]);
|
||||||
}
|
}
|
||||||
if (res.rows.length === 0) {
|
if (res.rows.length === 0) {
|
||||||
await client.end();
|
|
||||||
return eitherRight<Model, string>("Does not exist.");
|
return eitherRight<Model, string>("Does not exist.");
|
||||||
}
|
}
|
||||||
const model = db2Model(res.rows[0]);
|
const model = db2Model(res.rows[0]);
|
||||||
await client.end();
|
|
||||||
|
|
||||||
return eitherLeft<Model, string>(model);
|
return eitherLeft<Model, string>(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
const getAllModels = async () => {
|
const getAllModels = async () => {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
|
|
||||||
const res = await client.query("SELECT * FROM modeles");
|
const res = await client.query("SELECT * FROM modeles");
|
||||||
|
|
||||||
await client.end();
|
|
||||||
return res.rows.map(db2Model);
|
return res.rows.map(db2Model);
|
||||||
}
|
}
|
||||||
|
|
||||||
const getAllModelsFromFans = async () => {
|
const getAllModelsFromFans = async () => {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
|
|
||||||
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"
|
||||||
);
|
);
|
||||||
|
|
||||||
await client.end();
|
return res.rows.map(db2Model);
|
||||||
|
}
|
||||||
|
|
||||||
|
const getAllBuildableModels = async (id_member: number) => {
|
||||||
|
const client = new_client();
|
||||||
|
|
||||||
|
const res = await client.query(
|
||||||
|
"SELECT modeles_faisables_membre($1)",
|
||||||
|
[id_member]
|
||||||
|
);
|
||||||
|
|
||||||
return res.rows.map(db2Model);
|
return res.rows.map(db2Model);
|
||||||
}
|
}
|
||||||
|
|
||||||
const getAllModelsByNote = async () => {
|
const getAllModelsByNote = async () => {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
|
|
||||||
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;"
|
||||||
);
|
);
|
||||||
|
|
||||||
await client.end();
|
|
||||||
console.log(res);
|
|
||||||
return res.rows.map(db2Model);
|
return res.rows.map(db2Model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +83,6 @@ const createModel = async (name: string, url: string, creator: number, inheritFr
|
|||||||
return eitherRight<Model, string>("Already in database.");
|
return eitherRight<Model, string>("Already in database.");
|
||||||
}
|
}
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
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) \
|
||||||
@ -91,11 +91,9 @@ const createModel = async (name: string, url: string, creator: number, inheritFr
|
|||||||
[`${name}`, `${url}`, `${creator}`, `${inheritFrom}`]);
|
[`${name}`, `${url}`, `${creator}`, `${inheritFrom}`]);
|
||||||
|
|
||||||
if (res.rows.length === 0) {
|
if (res.rows.length === 0) {
|
||||||
await client.end();
|
|
||||||
return eitherRight<Model, string>("Something went wrong");
|
return eitherRight<Model, string>("Something went wrong");
|
||||||
}
|
}
|
||||||
const model: Model = db2Model(res.rows[0]);
|
const model: Model = db2Model(res.rows[0]);
|
||||||
await client.end();
|
|
||||||
return eitherLeft<Model, string>(model);
|
return eitherLeft<Model, string>(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,6 +103,7 @@ const modelService = {
|
|||||||
createModel,
|
createModel,
|
||||||
getAllModelsFromFans,
|
getAllModelsFromFans,
|
||||||
getAllModelsByNote,
|
getAllModelsByNote,
|
||||||
|
getAllBuildableModels,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default modelService;
|
export default modelService;
|
||||||
|
@ -4,35 +4,28 @@ import { Either, eitherLeft, eitherRight, eitherFormatError } from '../utils/uti
|
|||||||
|
|
||||||
async function getEntity<T>(table: string, column: string, value: string | number, f: (o: Object) => T): Promise<Either<T, string>> {
|
async function getEntity<T>(table: string, column: string, value: string | number, f: (o: Object) => T): Promise<Either<T, string>> {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
const res = await client.query(`SELECT * FROM $1 WHERE $2=$3;`, [table, column, value]);
|
||||||
const res = await client.query(`SELECT * FROM ${client.escapeIdentifier(table)} WHERE $1=$2;`, [column, value]);
|
|
||||||
if (res.rows.length === 0) {
|
if (res.rows.length === 0) {
|
||||||
await client.end();
|
|
||||||
return eitherRight<T, string>('Not found in database.');
|
return eitherRight<T, string>('Not found in database.');
|
||||||
}
|
}
|
||||||
const entity: T = f(res.rows[0]);
|
const entity: T = f(res.rows[0]);
|
||||||
await client.end();
|
|
||||||
return eitherLeft<T, string>(entity);
|
return eitherLeft<T, string>(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getEntities<T>(table: string, f: (o: Object) => T): Promise<Array<T>> {
|
async function getEntities<T>(table: string, f: (o: Object) => T): Promise<Array<T>> {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
const res = await client.query(`SELECT * FROM $1;`, [table]);
|
||||||
const res = await client.query(`SELECT * FROM ${client.escapeIdentifier(table)};`);
|
|
||||||
const arr: Array<T> = new Array();
|
const arr: Array<T> = new Array();
|
||||||
for (let i = 0; i < res.rows.length; ++i) {
|
for (let i = 0; i < res.rows.length; ++i) {
|
||||||
arr.push(f(res.rows[i]));
|
arr.push(f(res.rows[i]));
|
||||||
}
|
}
|
||||||
await client.end();
|
|
||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function registerEntity<T>(table: string, colName: string, name: string, f: (o: Object) => T): Promise<T> {
|
async function registerEntity<T>(table: string, colName: string, name: string, f: (o: Object) => T): Promise<T> {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
const res = await client.query(`INSERT INTO $1 ($2) VALUES ($3) RETURNING *;`, [table, colName, name]);
|
||||||
const res = await client.query(`INSERT INTO ${client.escapeIdentifier(table)} (${client.escapeIdentifier(colName)}) VALUES ($1) RETURNING *;`, [name]);
|
|
||||||
const entity: T = f(res.rows[0]);
|
const entity: T = f(res.rows[0]);
|
||||||
await client.end();
|
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +79,6 @@ async function createShape(name: string): Promise<Shape> {
|
|||||||
|
|
||||||
async function getPiece(id: number): Promise<Either<Piece, string>> {
|
async function getPiece(id: number): Promise<Either<Piece, string>> {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
const res = await client.query(`SELECT * FROM pieces NATURAL JOIN colorer NATURAL JOIN couleurs NATURAL JOIN etre_forme NATURAL JOIN formes NATURAL JOIN avoir_motif NATURAL JOIN motifs WHERE id_piece = $1`, [id]);
|
const res = await client.query(`SELECT * FROM pieces NATURAL JOIN colorer NATURAL JOIN couleurs NATURAL JOIN etre_forme NATURAL JOIN formes NATURAL JOIN avoir_motif NATURAL JOIN motifs WHERE id_piece = $1`, [id]);
|
||||||
if (!res.rows[0]) {
|
if (!res.rows[0]) {
|
||||||
return eitherRight<Piece, string>("Nothing found");
|
return eitherRight<Piece, string>("Nothing found");
|
||||||
@ -97,7 +89,6 @@ async function getPiece(id: number): Promise<Either<Piece, string>> {
|
|||||||
|
|
||||||
async function getPieces(): Promise<Array<Piece>> {
|
async function getPieces(): Promise<Array<Piece>> {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
const res = await client.query(`SELECT * FROM pieces NATURAL JOIN colorer NATURAL JOIN couleurs NATURAL JOIN etre_forme NATURAL JOIN formes NATURAL JOIN avoir_motif NATURAL JOIN motifs;`);
|
const res = await client.query(`SELECT * FROM pieces NATURAL JOIN colorer NATURAL JOIN couleurs NATURAL JOIN etre_forme NATURAL JOIN formes NATURAL JOIN avoir_motif NATURAL JOIN motifs;`);
|
||||||
const arr: Array<Piece> = new Array();
|
const arr: Array<Piece> = new Array();
|
||||||
for (let i = 0; i < res.rows.length; ++i) {
|
for (let i = 0; i < res.rows.length; ++i) {
|
||||||
@ -108,13 +99,11 @@ async function getPieces(): Promise<Array<Piece>> {
|
|||||||
|
|
||||||
async function createPiece(colour: Colour, pattern: Pattern, shape: Shape): Promise<Piece> {
|
async function createPiece(colour: Colour, pattern: Pattern, shape: Shape): Promise<Piece> {
|
||||||
const client = new_client();
|
const client = new_client();
|
||||||
await client.connect();
|
|
||||||
const res = await client.query(`INSERT INTO pieces () VALUES () RETURNING *;`);
|
const res = await client.query(`INSERT INTO pieces () VALUES () RETURNING *;`);
|
||||||
const result: Piece = { id_piece: res.rows[0]['id_piece'], colour: colour, pattern: pattern, shape: shape };
|
const result: Piece = { id_piece: res.rows[0]['id_piece'], colour: colour, pattern: pattern, shape: shape };
|
||||||
await client.query("INSERT INTO colorer (id_piece, id_couleur) VALUES ($1, $2);", [result.id_piece, colour.id_colour]);
|
await client.query("INSERT INTO colorer (id_piece, id_couleur) VALUES ($1, $2);", [result.id_piece, colour.id_colour]);
|
||||||
await client.query("INSERT INTO etre_forme (id_forme, id_piece) VALUES ($1, $2);", [shape.id_shape, result.id_piece]);
|
await client.query("INSERT INTO etre_forme (id_forme, id_piece) VALUES ($1, $2);", [shape.id_shape, result.id_piece]);
|
||||||
await client.query("INSERT INTO avoir_motif (id_piece, id_motif) VALUES ($1, $2);", [result.id_piece, pattern.id_pattern])
|
await client.query("INSERT INTO avoir_motif (id_piece, id_motif) VALUES ($1, $2);", [result.id_piece, pattern.id_pattern])
|
||||||
await client.end();
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,8 +16,28 @@
|
|||||||
<h1>
|
<h1>
|
||||||
<%= member.name %>
|
<%= member.name %>
|
||||||
</h1>
|
</h1>
|
||||||
<h2>id: <%= member.id_member%>
|
|
||||||
</h2>
|
<hr>
|
||||||
|
|
||||||
|
<h2>Caractéristiques</h2>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
id: <%= member.id_member%>
|
||||||
|
name: <%= member.name%>
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<h2>Liste des modèles faisable</h2>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<% models.forEach(function(model) { %>
|
||||||
|
<li>
|
||||||
|
<a href="/models/byname/<%=model.id%>">
|
||||||
|
<%=model.id%>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<% }); %>
|
||||||
|
</ul>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user