Init 2
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
node_modules/
|
||||||
19
db.js
Normal file
19
db.js
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
const { Client } = require('pg');
|
||||||
|
|
||||||
|
const client = new Client({
|
||||||
|
host: 'kerboul.me',
|
||||||
|
port: 5777,
|
||||||
|
user: 'timelapse',
|
||||||
|
password: 'timelapse',
|
||||||
|
database: 'timelapse'
|
||||||
|
});
|
||||||
|
|
||||||
|
client.connect(err => {
|
||||||
|
if (err) {
|
||||||
|
console.error('Erreur de connexion à la base de données:', err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.log('Connecté à la base de données PostgreSQL.');
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = client;
|
||||||
1714
package-lock.json
generated
Executable file
1714
package-lock.json
generated
Executable file
File diff suppressed because it is too large
Load Diff
23
package.json
Executable file
23
package.json
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"name": "backend",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node server.js",
|
||||||
|
"dev": "nodemon server.js"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"description": "",
|
||||||
|
"dependencies": {
|
||||||
|
"express": "^4.21.0",
|
||||||
|
"mysql2": "^3.11.3",
|
||||||
|
"pg": "^8.13.0",
|
||||||
|
"swagger-jsdoc": "^6.2.8",
|
||||||
|
"swagger-ui-express": "^5.0.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"nodemon": "^3.1.7"
|
||||||
|
}
|
||||||
|
}
|
||||||
189
routes/api.js
Normal file
189
routes/api.js
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
// routes/api.js
|
||||||
|
const express = require('express');
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
const db = require('../db'); // Assurez-vous d'importer le fichier db.js
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 data.projets';
|
||||||
|
|
||||||
|
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);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
50
server.js
Normal file
50
server.js
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
// server.js
|
||||||
|
const express = require('express');
|
||||||
|
const app = express();
|
||||||
|
const port = 3000;
|
||||||
|
|
||||||
|
// Middleware pour gérer les requêtes JSON
|
||||||
|
app.use(express.json());
|
||||||
|
|
||||||
|
// Importer les routes
|
||||||
|
const apiRoutes = require('./routes/api');
|
||||||
|
app.use('/api', apiRoutes);
|
||||||
|
|
||||||
|
// Swagger dependencies
|
||||||
|
const swaggerUi = require('swagger-ui-express');
|
||||||
|
const swaggerJsdoc = require('swagger-jsdoc');
|
||||||
|
|
||||||
|
// Configuration de Swagger
|
||||||
|
const swaggerOptions = {
|
||||||
|
definition: {
|
||||||
|
openapi: '3.0.0',
|
||||||
|
info: {
|
||||||
|
title: 'API Documentation',
|
||||||
|
version: '1.0.0',
|
||||||
|
description: 'Documentation de l\'API avec Swagger',
|
||||||
|
},
|
||||||
|
servers: [
|
||||||
|
{
|
||||||
|
url: 'https://timelapse.kerboul.me/',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
apis: ['./routes/*.js'], // Prend en compte tous les fichiers de routes pour générer la documentation
|
||||||
|
};
|
||||||
|
|
||||||
|
// Initialisation de swagger-jsdoc
|
||||||
|
const swaggerDocs = swaggerJsdoc(swaggerOptions);
|
||||||
|
|
||||||
|
// Route Swagger UI
|
||||||
|
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocs));
|
||||||
|
|
||||||
|
// Route de base pour tester le serveur
|
||||||
|
app.get('/', (req, res) => {
|
||||||
|
res.send('Bienvenue sur mon API Node.js!');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Démarrer le serveur
|
||||||
|
app.listen(port, () => {
|
||||||
|
console.log(`Serveur démarré sur http://localhost:${port}`);
|
||||||
|
console.log(`Swagger documentation disponible sur http://localhost:${port}/api-docs`);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user