feat(database): Implement DatabaseManager for managing database structure and initialization
All checks were successful
SSH Backend Deploy / ssh-deploy (push) Successful in 1m51s

feat(routes): Add camera, image, measurement, project, and video routes with Swagger documentation

feat(services): Create storageService and videoService for file management and video processing

fix(errorHandler): Enhance error handling with standardized responses and database operation wrappers
This commit is contained in:
2025-04-27 01:02:33 +02:00
parent 792bdca965
commit 4513af3aa0
30 changed files with 3006 additions and 763 deletions

View File

@@ -1,47 +1,31 @@
// server.js
const express = require('express');
const cors = require('cors');
const cors = require('cors');
const app = express();
const port = 3000;
const swaggerUi = require('swagger-ui-express');
const swaggerJsdoc = require('swagger-jsdoc');
const config = require('./src/config');
const DatabaseManager = require('./src/models/database');
// Middleware pour gérer les requêtes JSON
app.use(express.json());
// Cors accès à tout
app.use(cors({
origin: ['http://127.0.0.1:5500', 'http://localhost:5500', 'http://localhost:3000'],
methods: ['GET', 'POST', 'PUT', 'DELETE'],
allowedHeaders: ['Content-Type'],
credentials: true,
}));
// Configuration CORS
app.use(cors(config.server.cors));
// Importer les routes
const apiRoutes = require('./api');
// Initialisation de la base de données
DatabaseManager.initialize()
.then(() => console.log('[SERVER] Base de données initialisée avec succès'))
.catch(err => console.error('[SERVER] Erreur d\'initialisation de la base de données:', err));
// Importer les routes API
const apiRoutes = require('./src/routes');
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/api',
},
{
url: 'http://localhost:3000/api',
}
],
},
apis: ['./routes/*.js'], // Prend en compte tous les fichiers de routes pour générer la documentation
definition: config.swagger.definition,
apis: config.swagger.apis
};
// Initialisation de swagger-jsdoc
@@ -52,14 +36,36 @@ app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocs));
// Route de base pour tester le serveur
app.get('/', (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');
res.send('Bienvenue sur mon API Node.js!');
res.send('Bienvenue sur l\'API Timelapse!');
});
// Gestion des erreurs 404
app.use((req, res) => {
res.status(404).json({
error: {
message: 'Route non trouvée',
path: req.path,
method: req.method,
statusCode: 404
}
});
});
// Gestion des erreurs globales
app.use((err, req, res, next) => {
console.error('[SERVER] Erreur non gérée:', err);
res.status(500).json({
error: {
message: 'Erreur serveur interne',
statusCode: 500,
details: process.env.NODE_ENV === 'production' ? undefined : err.message
}
});
});
// Démarrer le serveur
const port = config.server.port;
app.listen(port, () => {
console.log(`[SERVER] Serveur démarré sur http://localhost:${port}`);
console.log(`[SERVER] Swagger documentation disponible sur http://localhost:${port}/api-docs`);
console.log(`[SERVER] Documentation Swagger disponible sur http://localhost:${port}/api-docs`);
});