add docker + debug

This commit is contained in:
mahek 2025-07-21 16:38:07 +02:00
parent 848a79a04e
commit 1f4193f9c0
26 changed files with 21051 additions and 28 deletions

295
backend/API_DOCS.md Normal file
View file

@ -0,0 +1,295 @@
# Documentation de l'API Managerr
## Authentification
### Inscription
- **URL**: `/api/auth/register`
- **Méthode**: `POST`
- **Description**: Crée un nouvel utilisateur
- **Corps de la demande**:
```json
{
"username": "string",
"email": "string",
"password": "string"
}
```
- **Réponse réussie**:
- **Code**: 201 Created
- **Contenu**:
```json
{
"user": {
"_id": "string",
"username": "string",
"email": "string"
},
"token": "string"
}
```
### Connexion
- **URL**: `/api/auth/login`
- **Méthode**: `POST`
- **Description**: Authentifie un utilisateur
- **Corps de la demande**:
```json
{
"email": "string",
"password": "string"
}
```
- **Réponse réussie**:
- **Code**: 200 OK
- **Contenu**:
```json
{
"user": {
"_id": "string",
"username": "string",
"email": "string"
},
"token": "string"
}
```
## Paramètres
### Obtenir les paramètres
- **URL**: `/api/settings`
- **Méthode**: `GET`
- **Description**: Récupère les paramètres de l'utilisateur actuel
- **En-têtes**: `Authorization: Bearer {token}`
- **Réponse réussie**:
- **Code**: 200 OK
- **Contenu**:
```json
{
"_id": "string",
"user": "string",
"sonarrUrl": "string",
"sonarrApiKey": "string",
"radarrUrl": "string",
"radarrApiKey": "string"
}
```
### Créer/Mettre à jour les paramètres
- **URL**: `/api/settings`
- **Méthode**: `POST`
- **Description**: Crée ou met à jour les paramètres de l'utilisateur actuel
- **En-têtes**: `Authorization: Bearer {token}`
- **Corps de la demande**:
```json
{
"sonarrUrl": "string",
"sonarrApiKey": "string",
"radarrUrl": "string",
"radarrApiKey": "string"
}
```
- **Réponse réussie**:
- **Code**: 200 OK
- **Contenu**:
```json
{
"_id": "string",
"user": "string",
"sonarrUrl": "string",
"sonarrApiKey": "string",
"radarrUrl": "string",
"radarrApiKey": "string"
}
```
### Tester la connexion Sonarr
- **URL**: `/api/settings/test-sonarr`
- **Méthode**: `POST`
- **Description**: Teste la connexion à l'API Sonarr
- **En-têtes**: `Authorization: Bearer {token}`
- **Corps de la demande**:
```json
{
"sonarrUrl": "string",
"sonarrApiKey": "string"
}
```
- **Réponse réussie**:
- **Code**: 200 OK
- **Contenu**:
```json
{
"success": true,
"message": "Connexion réussie à Sonarr"
}
```
### Tester la connexion Radarr
- **URL**: `/api/settings/test-radarr`
- **Méthode**: `POST`
- **Description**: Teste la connexion à l'API Radarr
- **En-têtes**: `Authorization: Bearer {token}`
- **Corps de la demande**:
```json
{
"radarrUrl": "string",
"radarrApiKey": "string"
}
```
- **Réponse réussie**:
- **Code**: 200 OK
- **Contenu**:
```json
{
"success": true,
"message": "Connexion réussie à Radarr"
}
```
## Sonarr (Séries)
### Obtenir toutes les séries
- **URL**: `/api/sonarr/series`
- **Méthode**: `GET`
- **Description**: Récupère toutes les séries depuis Sonarr
- **En-têtes**: `Authorization: Bearer {token}`
- **Paramètres de requête**:
- `sortKey` (optionnel): Clé de tri
- `sortDirection` (optionnel): Direction du tri (asc/desc)
- **Réponse réussie**:
- **Code**: 200 OK
- **Contenu**:
```json
[
{
"id": "number",
"title": "string",
"overview": "string",
"status": "string",
"nextAiring": "string",
"network": "string",
"images": [
{
"coverType": "string",
"url": "string"
}
]
}
]
```
### Obtenir le calendrier des séries
- **URL**: `/api/sonarr/calendar`
- **Méthode**: `GET`
- **Description**: Récupère le calendrier des épisodes à venir
- **En-têtes**: `Authorization: Bearer {token}`
- **Paramètres de requête**:
- `start` (optionnel): Date de début (YYYY-MM-DD)
- `end` (optionnel): Date de fin (YYYY-MM-DD)
- **Réponse réussie**:
- **Code**: 200 OK
- **Contenu**:
```json
[
{
"id": "number",
"seriesId": "number",
"seasonNumber": "number",
"episodeNumber": "number",
"title": "string",
"airDate": "string",
"hasFile": "boolean",
"seriesTitle": "string"
}
]
```
## Radarr (Films)
### Obtenir tous les films
- **URL**: `/api/radarr/movies`
- **Méthode**: `GET`
- **Description**: Récupère tous les films depuis Radarr
- **En-têtes**: `Authorization: Bearer {token}`
- **Paramètres de requête**:
- `sortKey` (optionnel): Clé de tri
- `sortDirection` (optionnel): Direction du tri (asc/desc)
- **Réponse réussie**:
- **Code**: 200 OK
- **Contenu**:
```json
[
{
"id": "number",
"title": "string",
"overview": "string",
"status": "string",
"inCinemas": "string",
"physicalRelease": "string",
"images": [
{
"coverType": "string",
"url": "string"
}
]
}
]
```
### Obtenir le calendrier des films
- **URL**: `/api/radarr/calendar`
- **Méthode**: `GET`
- **Description**: Récupère le calendrier des films à venir
- **En-têtes**: `Authorization: Bearer {token}`
- **Paramètres de requête**:
- `start` (optionnel): Date de début (YYYY-MM-DD)
- `end` (optionnel): Date de fin (YYYY-MM-DD)
- **Réponse réussie**:
- **Code**: 200 OK
- **Contenu**:
```json
[
{
"id": "number",
"title": "string",
"overview": "string",
"status": "string",
"inCinemas": "string",
"physicalRelease": "string",
"hasFile": "boolean"
}
]
```
## Réponses d'erreur communes
### Erreur d'authentification
- **Code**: 401 Unauthorized
- **Contenu**:
```json
{
"message": "Non autorisé"
}
```
### Erreur de validation
- **Code**: 400 Bad Request
- **Contenu**:
```json
{
"message": "Validation échouée",
"errors": {
"champ": ["Message d'erreur"]
}
}
```
### Erreur de connexion API
- **Code**: 503 Service Unavailable
- **Contenu**:
```json
{
"message": "Impossible de se connecter à l'API [Sonarr/Radarr]",
"error": "Détails de l'erreur"
}
```

18
backend/Dockerfile Normal file
View file

@ -0,0 +1,18 @@
FROM node:16-alpine
WORKDIR /app
# Copy package.json and package-lock.json
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy the rest of the application
COPY . .
# Expose port 5000
EXPOSE 5000
# Start the application
CMD ["npm", "run", "dev"]

View file

@ -98,3 +98,14 @@ exports.getMe = async (req, res) => {
res.status(500).send('Erreur serveur');
}
};
// Vérifier si des utilisateurs existent dans la base de données
exports.checkUsersExist = async (req, res) => {
try {
const count = await User.countDocuments();
res.json({ usersExist: count > 0 });
} catch (err) {
console.error(err.message);
res.status(500).send('Erreur serveur');
}
};

5453
backend/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -12,4 +12,7 @@ router.post('/login', authController.login);
// Récupération des informations de l'utilisateur connecté
router.get('/me', auth, authController.getMe);
// Vérifier si des utilisateurs existent dans la base de données
router.get('/check-users-exist', authController.checkUsersExist);
module.exports = router;

View file

@ -4,7 +4,7 @@ const mongoose = require('mongoose');
const dotenv = require('dotenv');
// Chargement des variables d'environnement
dotenv.config({ path: '../config/.env' });
dotenv.config(); // Utilise le fichier .env dans le répertoire courant
// Initialisation de l'application Express
const app = express();