merge with master
continuous-integration/drone/push Build is failing Details

WORK-RHA
Rémi REGNAULT 1 year ago
commit f678b21a56

File diff suppressed because it is too large Load Diff

@ -17,6 +17,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",
@ -28,7 +29,8 @@
"typescript": "^5.2.2" "typescript": "^5.2.2"
}, },
"devDependencies": { "devDependencies": {
"@types/jest": "^29.5.10", "@types/cors": "^2.8.17",
"@types/jest": "^29.5.8",
"@types/pg": "^8.10.9", "@types/pg": "^8.10.9",
"@types/supertest": "^2.0.16", "@types/supertest": "^2.0.16",
"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,58 @@ export class IngredientsGateway {
return ingredients as Ingredient[]; return ingredients as Ingredient[];
} }
async getByLetter(letter: string): Promise<any> {
const client = await this.connection.getPoolClient()
const query = {
text: 'SELECT * FROM Ingredients i WHERE LOWER(SUBSTRING(i.name, 1, 1)) = $1',
values: [letter.toLowerCase()],
};
const res = await client.query(query);
client.release()
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> {
const client = await this.connection.getPoolClient()
const query = {
text: 'SELECT * FROM Ingredients WHERE LOWER(name) LIKE $1',
values: [`%${prompt.toLowerCase()}%`],
};
const res = await client.query(query);
client.release()
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,25 +1,31 @@
import express from "express";
require('dotenv').config(); require('dotenv').config();
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";
let helmet = require("helmet"); let helmet = require("helmet");
const app = express(); const 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;
export const server = app.listen(port, () => console.log(`App listenning on PORT ${port}`)); export const server = app.listen(port, () => console.log(`App listening on PORT ${port}`));
export default app; export default app;
Loading…
Cancel
Save