add docker + debug
This commit is contained in:
parent
848a79a04e
commit
1f4193f9c0
26 changed files with 21051 additions and 28 deletions
295
backend/API_DOCS.md
Normal file
295
backend/API_DOCS.md
Normal 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
18
backend/Dockerfile
Normal 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"]
|
||||
|
|
@ -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
5453
backend/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue