Merge branch 'WORK-RHA'
continuous-integration/drone/push Build is passing Details

pull/9/head
Rayhân HASSOU 1 year ago
commit 1c0d9f2f43

@ -12,6 +12,7 @@
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/morgan": "^1.9.9", "@types/morgan": "^1.9.9",
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"cors": "^2.8.5",
"express": "^4.18.2", "express": "^4.18.2",
"helmet": "^7.1.0", "helmet": "^7.1.0",
"morgan": "^1.10.0", "morgan": "^1.10.0",
@ -22,6 +23,7 @@
"typescript": "^5.2.2" "typescript": "^5.2.2"
}, },
"devDependencies": { "devDependencies": {
"@types/cors": "^2.8.17",
"@types/jest": "^29.5.8", "@types/jest": "^29.5.8",
"@types/pg": "^8.10.9", "@types/pg": "^8.10.9",
"jest": "^29.7.0", "jest": "^29.7.0",
@ -1246,6 +1248,15 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"node_modules/@types/cors": {
"version": "2.8.17",
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
"integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
"dev": true,
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/express": { "node_modules/@types/express": {
"version": "4.17.21", "version": "4.17.21",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
@ -2102,6 +2113,18 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
}, },
"node_modules/cors": {
"version": "2.8.5",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
"dependencies": {
"object-assign": "^4",
"vary": "^1"
},
"engines": {
"node": ">= 0.10"
}
},
"node_modules/create-jest": { "node_modules/create-jest": {
"version": "29.7.0", "version": "29.7.0",
"resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",

@ -15,6 +15,7 @@
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/morgan": "^1.9.9", "@types/morgan": "^1.9.9",
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"cors": "^2.8.5",
"express": "^4.18.2", "express": "^4.18.2",
"helmet": "^7.1.0", "helmet": "^7.1.0",
"morgan": "^1.10.0", "morgan": "^1.10.0",
@ -25,6 +26,7 @@
"typescript": "^5.2.2" "typescript": "^5.2.2"
}, },
"devDependencies": { "devDependencies": {
"@types/cors": "^2.8.17",
"@types/jest": "^29.5.8", "@types/jest": "^29.5.8",
"@types/pg": "^8.10.9", "@types/pg": "^8.10.9",
"jest": "^29.7.0", "jest": "^29.7.0",

@ -2,25 +2,56 @@ import { Router } from "express";
import { Exceptions } from "../utils/exception"; import { Exceptions } from "../utils/exception";
import { IngredientsGateway } from "../gateways/ingredients.gateway"; import { IngredientsGateway } from "../gateways/ingredients.gateway";
const IngredientsController = Router() const IngredientsController = Router()
const ingredient_gw = new IngredientsGateway() const ingredient_gw = new IngredientsGateway()
/** To get all ingredients */
IngredientsController.get('/', async (req, res) => { IngredientsController.get('/filter/:prompt', async (req, res) => {
const letter = req.params.prompt;
if (!letter) {
throw new Exceptions.BadRequestException('prompt is invalid!');
}
try { try {
const ingredients = await ingredient_gw.getAll() const ingredient = await ingredient_gw.filter(letter);
res.status(200).json(ingredients) if (ingredient == null) {
res.status(404).send('Not found');
} else {
res.status(200).json(ingredient);
}
} catch (error) { } catch (error) {
const error_error = error as Error const error_error = error as Error
res.status(500).send(error_error.message) res.status(500).send(error_error.message);
} }
}) });
IngredientsController.get('/letter/:letter', async (req, res) => {
const letter = req.params.letter;
if (!letter) {
throw new Exceptions.BadRequestException('Letter is invalid!');
}
try {
const ingredient = await ingredient_gw.getByLetter(letter);
if (ingredient == null) {
res.status(404).send('Not found');
} else {
res.status(200).json(ingredient);
}
} catch (error) {
const error_error = error as Error
res.status(500).send(error_error.message);
}
});
/** To get one ingredient by id */ /** To get one ingredient by id */
IngredientsController.get('/:id', async (req, res) => { IngredientsController.get('/:id', async (req, res) => {
console
const id = Number(req.params.id); const id = Number(req.params.id);
if (!Number.isInteger(id)) { if (!Number.isInteger(id)) {
@ -42,4 +73,15 @@ IngredientsController.get('/:id', async (req, res) => {
} }
}) })
IngredientsController.get('/', async (req, res) => {
try {
const ingredients = await ingredient_gw.getAll()
res.status(200).json(ingredients)
} catch (error) {
const error_error = error as Error
res.status(500).send(error_error.message)
}
})
export { IngredientsController } export { IngredientsController }

@ -62,7 +62,6 @@ export class IngredientsGateway {
return null; return null;
} }
const ingredients = res.rows.map(row => ({ const ingredients = res.rows.map(row => ({
name: row.name, name: row.name,
id: Number(row.id), // Conversion de l'identifiant en nombre id: Number(row.id), // Conversion de l'identifiant en nombre
@ -71,4 +70,56 @@ export class IngredientsGateway {
return ingredients as Ingredient[]; return ingredients as Ingredient[];
} }
async getByLetter(letter: string): Promise<any> {
this.connection.connect();
const query = {
text: 'SELECT * FROM Ingredients i WHERE LOWER(SUBSTRING(i.name, 1, 1)) = $1',
values: [letter.toLowerCase()],
};
const res = await this.connection.client.query(query);
console.log(res)
if (res.rowCount === 0) {
return null;
}
let ingredients: Ingredient[] = [];
for (const row of res.rows) {
const ingredient: Ingredient = new Ingredient(Number(row.id), row.name);
ingredients.push(ingredient);
}
return ingredients;
}
async filter(prompt: string): Promise<any> {
this.connection.connect();
const query = {
text: 'SELECT * FROM Ingredients WHERE LOWER(name) LIKE $1',
values: [`%${prompt.toLowerCase()}%`],
};
const res = await this.connection.client.query(query);
console.log(res)
if (res.rowCount === 0) {
return null;
}
let ingredients: Ingredient[] = [];
for (const row of res.rows) {
const ingredient: Ingredient = new Ingredient(Number(row.id), row.name);
ingredients.push(ingredient);
}
return ingredients;
}
} }

@ -1,7 +1,6 @@
import express from "express"; import express from "express";
require('dotenv').config(); require('dotenv').config();
import cors from "cors";
import { IngredientsController } from "./controllers/ingredients.controller"; import { IngredientsController } from "./controllers/ingredients.controller";
import { RecipesController } from "./controllers/recipes.controller"; import { RecipesController } from "./controllers/recipes.controller";
import { StepsController } from "./controllers/steps.controller"; import { StepsController } from "./controllers/steps.controller";
@ -10,14 +9,19 @@ let helmet = require("helmet");
let app = express(); let app = express();
app.use(helmet.hidePoweredBy()); app.use(helmet.hidePoweredBy());
// Configuration du middleware CORS pour autoriser toutes les origines
app.use(cors({
origin: '*',
}));
app.get('/', (req, res) => { app.get('/', (req, res) => {
res.send('Hello from express and typescript !'); res.json({ message: 'Hello from express and typescript!' });
}); });
app.use('/ingredients', IngredientsController); app.use('/ingredients', IngredientsController);
app.use('/recipes', RecipesController); app.use('/recipes', RecipesController);
app.use('/steps', StepsController) app.use('/steps', StepsController);
const port = process.env.PORT || 3000; const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`App listenning on PORT ${port}`)); app.listen(port, () => console.log(`App listening on PORT ${port}`));

Loading…
Cancel
Save