# Linux BenchTools - Backend

Backend API FastAPI pour Linux BenchTools.

## Structure

```
backend/
├── app/
│   ├── api/           # Endpoints API
│   ├── core/          # Configuration et sécurité
│   ├── models/        # Modèles SQLAlchemy
│   ├── schemas/       # Schémas Pydantic
│   ├── db/            # Configuration base de données
│   ├── utils/         # Utilitaires
│   └── main.py        # Application principale
├── data/              # Base SQLite (gitignored)
├── Dockerfile
└── requirements.txt
```

## Installation locale (développement)

```bash
# Créer un environnement virtuel
python3 -m venv venv
source venv/bin/activate

# Installer les dépendances
pip install -r requirements.txt

# Définir les variables d'environnement
export API_TOKEN="your-secret-token"
export DATABASE_URL="sqlite:///./backend/data/data.db"
export UPLOAD_DIR="./uploads"

# Lancer le serveur
uvicorn app.main:app --reload --host 0.0.0.0 --port 8007
```

## Endpoints API

### Benchmarks
- `POST /api/benchmark` - Soumettre un benchmark (auth required)
- `GET /api/benchmarks/{id}` - Détails d'un benchmark

### Devices
- `GET /api/devices` - Liste des devices (pagination + recherche)
- `GET /api/devices/{id}` - Détails d'un device
- `GET /api/devices/{id}/benchmarks` - Historique benchmarks
- `PUT /api/devices/{id}` - Modifier un device

### Links
- `GET /api/devices/{id}/links` - Liens d'un device
- `POST /api/devices/{id}/links` - Ajouter un lien
- `PUT /api/links/{id}` - Modifier un lien
- `DELETE /api/links/{id}` - Supprimer un lien

### Documents
- `GET /api/devices/{id}/docs` - Documents d'un device
- `POST /api/devices/{id}/docs` - Upload document
- `GET /api/docs/{id}/download` - Télécharger document
- `DELETE /api/docs/{id}` - Supprimer document

### Autres
- `GET /api/health` - Health check
- `GET /api/stats` - Statistiques globales

## Documentation interactive

Une fois le serveur lancé, accédez à :
- Swagger UI : http://localhost:8007/docs
- ReDoc : http://localhost:8007/redoc

## Variables d'environnement

| Variable | Description | Défaut |
|----------|-------------|--------|
| `API_TOKEN` | Token d'authentification | `CHANGE_ME` |
| `DATABASE_URL` | URL de la base SQLite | `sqlite:///./backend/data/data.db` |
| `UPLOAD_DIR` | Répertoire des uploads | `./uploads` |
| `CORS_ORIGINS` | Origins CORS autorisées | `["*"]` |

## Authentification

L'API utilise un token Bearer simple pour l'endpoint POST /api/benchmark :

```http
Authorization: Bearer YOUR_API_TOKEN
```

## Base de données

SQLite avec 5 tables principales :
- `devices` - Machines
- `hardware_snapshots` - Snapshots hardware
- `benchmarks` - Résultats de benchmarks
- `manufacturer_links` - Liens constructeurs
- `documents` - Documents uploadés

## Développement

```bash
# Linter
flake8 app/

# Format code
black app/

# Type checking
mypy app/
```
