319 lines
8.8 KiB
JavaScript
319 lines
8.8 KiB
JavaScript
// routes/api.js
|
|
const express = require('express');
|
|
const router = express.Router();
|
|
|
|
const db = require('../db'); // Assurez-vous d'importer le fichier db.js
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
|
|
/**
|
|
* @swagger
|
|
* /itemsdb:
|
|
* get:
|
|
* description: Use to request all items from the database
|
|
* responses:
|
|
* 200:
|
|
* description: A successful response
|
|
* 500:
|
|
* description: Internal server error
|
|
*/
|
|
router.get('/itemsdb', (req, res) => {
|
|
const query = 'SELECT * FROM public.projets';
|
|
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:5500');
|
|
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
|
|
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
db.query(query, (err, results) => {
|
|
if (err) {
|
|
console.error('Erreur lors de la récupération des projets:', err);
|
|
return res.status(500).json({ error: 'Erreur serveur' });
|
|
}
|
|
res.json(results.rows);
|
|
});
|
|
});
|
|
|
|
/**
|
|
* @swagger
|
|
* /images/{id}:
|
|
* get:
|
|
* description: Use to request images by project ID
|
|
* parameters:
|
|
* - in: path
|
|
* name: id
|
|
* required: true
|
|
* description: Numeric ID of the project to retrieve images for.
|
|
* schema:
|
|
* type: integer
|
|
* responses:
|
|
* 200:
|
|
* description: A successful response
|
|
* 500:
|
|
* description: Internal server error
|
|
*/
|
|
router.get('/images/:id', (req, res) => {
|
|
const projectId = req.params.id;
|
|
const query = 'SELECT * FROM public.images WHERE id_projet = $1';
|
|
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:5500');
|
|
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
|
|
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
db.query(query, [projectId], (err, results) => {
|
|
if (err) {
|
|
console.error('Erreur lors de la récupération des images:', err);
|
|
return res.status(500).json({ error: 'Erreur serveur' });
|
|
}
|
|
res.json(results.rows);
|
|
});
|
|
});
|
|
|
|
/**
|
|
* @swagger
|
|
* /videos/{id}:
|
|
* get:
|
|
* description: Use to request videos by project ID
|
|
* parameters:
|
|
* - in: path
|
|
* name: id
|
|
* required: true
|
|
* description: Numeric ID of the project to retrieve videos for.
|
|
* schema:
|
|
* type: integer
|
|
* responses:
|
|
* 200:
|
|
* description: A successful response
|
|
* 500:
|
|
* description: Internal server error
|
|
*/
|
|
router.get('/videos/:id', (req, res) => {
|
|
const projectId = req.params.id;
|
|
const query = 'SELECT * FROM public.videos WHERE id_projet = $1';
|
|
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:5500');
|
|
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
|
|
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
db.query(query, [projectId], (err, results) => {
|
|
if (err) {
|
|
console.error('Erreur lors de la récupération des vidéos:', err);
|
|
return res.status(500).json({ error: 'Erreur serveur' });
|
|
}
|
|
res.json(results.rows);
|
|
});
|
|
});
|
|
|
|
|
|
/**
|
|
* @swagger
|
|
* /metric/{id}:
|
|
* get:
|
|
* description: Use to request metrics by project ID
|
|
* parameters:
|
|
* - in: path
|
|
* name: id
|
|
* required: true
|
|
* description: Numeric ID of the project to retrieve metrics for.
|
|
* schema:
|
|
* type: integer
|
|
* responses:
|
|
* 200:
|
|
* description: A successful response
|
|
* 500:
|
|
* description: Internal server error
|
|
*/
|
|
router.get('/metric/:id', (req, res) => {
|
|
const projectId = req.params.id;
|
|
const query = 'SELECT * FROM public.metrique WHERE id_projet = $1';
|
|
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:5500');
|
|
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
|
|
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
db.query(query, [projectId], (err, results) => {
|
|
if (err) {
|
|
console.error('Erreur lors de la récupération des métriques:', err);
|
|
return res.status(500).json({ error: 'Erreur serveur' });
|
|
}
|
|
res.json(results.rows);
|
|
});
|
|
});
|
|
|
|
/**
|
|
* @swagger
|
|
* /items:
|
|
* get:
|
|
* description: Use to request all items
|
|
* responses:
|
|
* 200:
|
|
* description: A successful response
|
|
*/
|
|
router.get('/items', (req, res) => {
|
|
res.json([{ id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }]);
|
|
});
|
|
|
|
/**
|
|
* @swagger
|
|
* /items_recever:
|
|
* post:
|
|
* description: Use to receive items
|
|
* responses:
|
|
* 200:
|
|
* description: A successful response
|
|
*/
|
|
router.post('/items_recever', (req, res) => {
|
|
console.log(req.body);
|
|
});
|
|
|
|
/**
|
|
* @swagger
|
|
* /items/{id}:
|
|
* get:
|
|
* description: Use to request a specific item by id
|
|
* parameters:
|
|
* - in: path
|
|
* name: id
|
|
* required: true
|
|
* description: Numeric ID of the item to retrieve.
|
|
* schema:
|
|
* type: integer
|
|
* responses:
|
|
* 200:
|
|
* description: A successful response
|
|
*/
|
|
router.get('/items/:id', (req, res) => {
|
|
const itemId = req.params.id;
|
|
res.json({ id: itemId, name: `Item ${itemId}` });
|
|
});
|
|
|
|
/**
|
|
* @swagger
|
|
* /items:
|
|
* post:
|
|
* description: Use to create a new item
|
|
* responses:
|
|
* 200:
|
|
* description: A successful response
|
|
*/
|
|
router.post('/items', (req, res) => {
|
|
const newItem = req.body;
|
|
res.json({ message: 'Nouvel élément créé', data: newItem });
|
|
});
|
|
|
|
/**
|
|
* @swagger
|
|
* /items/{id}:
|
|
* put:
|
|
* description: Use to update a specific item by id
|
|
* parameters:
|
|
* - in: path
|
|
* name: id
|
|
* required: true
|
|
* description: Numeric ID of the item to update.
|
|
* schema:
|
|
* type: integer
|
|
* responses:
|
|
* 200:
|
|
* description: A successful response
|
|
*/
|
|
router.put('/items/:id', (req, res) => {
|
|
const itemId = req.params.id;
|
|
const updatedItem = req.body;
|
|
res.json({ message: `Élément avec l'ID ${itemId} mis à jour`, data: updatedItem });
|
|
});
|
|
|
|
/**
|
|
* @swagger
|
|
* /items/{id}:
|
|
* delete:
|
|
* description: Use to delete a specific item by id
|
|
* parameters:
|
|
* - in: path
|
|
* name: id
|
|
* required: true
|
|
* description: Numeric ID of the item to delete.
|
|
* schema:
|
|
* type: integer
|
|
* responses:
|
|
* 200:
|
|
* description: A successful response
|
|
*/
|
|
router.delete('/items/:id', (req, res) => {
|
|
const itemId = req.params.id;
|
|
res.json({ message: `Élément avec l'ID ${itemId} supprimé` });
|
|
});
|
|
|
|
/**
|
|
* @swagger
|
|
* /projets:
|
|
* post:
|
|
* description: Use to add a new project with a name and id
|
|
* responses:
|
|
* 201:
|
|
* description: Project added successfully
|
|
* 500:
|
|
* description: Internal server error
|
|
*/
|
|
router.post('/projets', (req, res) => {
|
|
// Requête d'insertion
|
|
const query = 'INSERT INTO data.projets (name, id) VALUES ($1, $2) RETURNING id';
|
|
db.query(query, [req.body.name, req.body.id], (err, results) => {
|
|
if (err) {
|
|
console.error('Erreur lors de l\'ajout du projet:', err);
|
|
return res.status(500).json({ error: 'Erreur serveur' });
|
|
}
|
|
res.status(201).json({ message: 'Projet ajouté avec succès', id: results.rows[0].id });
|
|
});
|
|
});
|
|
|
|
/**
|
|
* @swagger
|
|
* /delete:
|
|
* post:
|
|
* description: Use to delete a project by ID
|
|
* responses:
|
|
* 200:
|
|
* description: Project deleted successfully
|
|
* 404:
|
|
* description: No project found with this ID
|
|
* 500:
|
|
* description: Internal server error
|
|
*/
|
|
router.post('/delete', (req, res) => {
|
|
console.log("On entre dans la méthode")
|
|
console.log(req.body.id)
|
|
const id = req.body.id
|
|
// Requête de suppression
|
|
const query = 'DELETE FROM data.projets WHERE id = $1 RETURNING id';
|
|
db.query(query, [req.body.id], (err, results) => {
|
|
if (err) {
|
|
console.error('Erreur lors de la suppression du projet:', err);
|
|
return res.status(500).json({ error: 'Erreur serveur' });
|
|
}
|
|
if (results.rowCount === 0) {
|
|
return res.status(404).json({ error: 'Aucun projet trouvé avec cet ID.' });
|
|
}
|
|
|
|
res.status(200).json({ message: 'Projet supprimé avec succès', id });
|
|
});
|
|
});
|
|
|
|
/**
|
|
* @swagger
|
|
* /smile:
|
|
* get:
|
|
* description: Use to request the smile image
|
|
* responses:
|
|
* 200:
|
|
* description: A successful response
|
|
* 404:
|
|
* description: Image not found
|
|
*/
|
|
router.get('/smile', (req, res) => {
|
|
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:5500');
|
|
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
|
|
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
const imagePath = path.join(__dirname, '/storage/smile.jpg');
|
|
fs.access(imagePath, fs.constants.F_OK, (err) => {
|
|
if (err) {
|
|
console.error('Image not found:', err);
|
|
return res.status(404).json({ error: 'Image not found' });
|
|
}
|
|
res.sendFile(imagePath);
|
|
});
|
|
});
|
|
|
|
module.exports = router;
|