add some changes
continuous-integration/drone/push Build is passing Details

pull/9/head
Rayhân HASSOU 1 year ago
parent 32c249e7b8
commit 8d8e205f94

@ -11,6 +11,7 @@
"dependencies": { "dependencies": {
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/morgan": "^1.9.9", "@types/morgan": "^1.9.9",
"cors": "^2.8.5",
"express": "^4.18.2", "express": "^4.18.2",
"morgan": "^1.10.0", "morgan": "^1.10.0",
"nodemon": "^3.0.1", "nodemon": "^3.0.1",
@ -20,6 +21,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",
@ -1244,6 +1246,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",
@ -2100,6 +2111,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",

@ -8,12 +8,13 @@
"build": "tsup src/server.ts --format cjs --clean", "build": "tsup src/server.ts --format cjs --clean",
"dev": "nodemon --watch src -e js,ts,json --exec \"ts-node src/server.ts\"", "dev": "nodemon --watch src -e js,ts,json --exec \"ts-node src/server.ts\"",
"test": "jest --passWithNoTests" "test": "jest --passWithNoTests"
}, },
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/morgan": "^1.9.9", "@types/morgan": "^1.9.9",
"cors": "^2.8.5",
"express": "^4.18.2", "express": "^4.18.2",
"morgan": "^1.10.0", "morgan": "^1.10.0",
"nodemon": "^3.0.1", "nodemon": "^3.0.1",
@ -23,11 +24,10 @@
"typescript": "^5.2.2" "typescript": "^5.2.2"
}, },
"devDependencies": { "devDependencies": {
"@types/cors": "^2.8.17",
"@types/pg": "^8.10.9",
"@types/jest": "^29.5.8", "@types/jest": "^29.5.8",
"@types/pg": "^8.10.9",
"jest": "^29.7.0", "jest": "^29.7.0",
"ts-jest": "^29.1.1" "ts-jest": "^29.1.1"
} }
} }

@ -2,29 +2,58 @@ import { Request, Response, NextFunction } from "express";
import { Router } from "express"; import { Router } from "express";
import { Exceptions } from "../utils/exception"; import { Exceptions } from "../utils/exception";
import { IIngredient, Ingredient } from "../types/ingredients"; import { IIngredient, Ingredient } from "../types/ingredients";
import { pool } from "../database/connection";
import { Query, QueryResult } from "pg";
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)) {
@ -39,7 +68,6 @@ IngredientsController.get('/:id', async (req, res) => {
} }
else { else {
const ingredient_ingredient = ingredient as Ingredient const ingredient_ingredient = ingredient as Ingredient
res.status(200).json(ingredient) res.status(200).json(ingredient)
} }
} catch (error) { } catch (error) {
@ -48,4 +76,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 }

@ -57,7 +57,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
@ -67,4 +66,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,18 +1,24 @@
import express from "express"; import express from "express";
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";
const app = express(); const app = express();
// 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