// 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('/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;