# Timelapse Backend

Ce projet est une API de backend pour gérer une solution de timelapse avec capture, stockage et transformation d'images en vidéos.

## Architecture

L'application a été refactorisée pour suivre un modèle MVC (Modèle-Vue-Contrôleur) et respecter le principe de séparation des préoccupations. Voici la structure du projet :

```
/src
  /config        - Configuration centralisée de l'application
  /controllers   - Logique de traitement des requêtes HTTP
  /database      - Connexion à la base de données
  /data          - Compatibilité avec l'ancienne version (à terme, à supprimer)
  /middlewares   - Middlewares Express
  /models        - Modèles de données et logique d'accès à la BDD
  /routes        - Définition des routes de l'API
  /services      - Services métier et logique complexe
  /utils         - Utilitaires partagés
  /video         - Compatibilité avec l'ancienne version (à terme, à supprimer)
```

### Points d'entrée

- `server.js` - Point d'entrée principal du serveur Express
- `api.js` - Routes principales de l'API

## Composants principaux

### Modèles

Les modèles encapsulent la logique d'accès aux données et les règles métier :

- `Project.js` - Gestion des projets de timelapse
- `Measurement.js` - Gestion des mesures et images
- `Video.js` - Gestion des vidéos générées
- `Camera.js` - Gestion de la caméra et des paramètres de capture

### Contrôleurs

Les contrôleurs gèrent le traitement des requêtes HTTP et interagissent avec les modèles et services :

- `projectController.js` - Gestion des projets
- `measurementController.js` - Gestion des mesures
- `videoController.js` - Gestion des vidéos
- `imageController.js` - Gestion des images et téléchargements
- `cameraController.js` - Gestion des paramètres de la caméra

### Services

Les services implémentent la logique métier complexe :

- `storageService.js` - Gestion du stockage des fichiers
- `videoService.js` - Service de création de vidéos à partir d'images

### Routes

Les routes définissent les points d'accès HTTP de l'API :

- `projectRoutes.js` - Routes pour les projets
- `measurementRoutes.js` - Routes pour les mesures
- `videoRoutes.js` - Routes pour les vidéos
- `imageRoutes.js` - Routes pour les images
- `cameraRoutes.js` - Routes pour la caméra

## Déploiement

Le déploiement est géré via Docker Compose, avec une configuration dans `docker-compose.yml`. Le script `deploy.sh` gère le déploiement automatisé.

## Phase de Transition

L'application est actuellement en phase de transition de l'ancienne architecture vers la nouvelle. Les fichiers suivants sont des ponts de compatibilité qui seront progressivement supprimés :

- `src/database/database_manager.js` - Redirige vers les nouveaux modèles
- `src/data/storage_manager.js` - Redirige vers le nouveau service de stockage
- `src/video/videoManager.js` - Redirige vers le nouveau service vidéo

Pour supprimer les fichiers obsolètes une fois toutes les références mises à jour, utilisez :

```bash
node cleanup.js delete
```

## Documentation API

La documentation de l'API est disponible via Swagger à l'adresse `/api-docs`.