File size: 2,095 Bytes
5539271
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# Backend — Docling Studio (document-parser)

FastAPI + Python 3.12+ + Docling 2.x + aiosqlite + pytest.

## Commandes

```bash
ruff check .              # Lint
ruff check . --fix        # Lint + auto-fix
ruff format .             # Format
pytest tests/ -v          # Tests (asyncio_mode=auto)
uvicorn main:app --reload --port 8000  # Dev server
```

## Architecture (Clean Architecture)

- `domain/` — Modèles métier purs, pas de dépendances externes. Dataclasses, value objects, ports abstraits.
- `api/` — Couche HTTP : routers FastAPI, schemas Pydantic (DTOs). Sérialisation camelCase via `alias_generator`.
- `services/` — Orchestration des cas d'usage. Relie domain, persistence et infra.
- `persistence/` — Repository pattern avec aiosqlite (SQLite). `database.py` gère connexion et init du schéma.
- `infra/` — Adaptateurs : `LocalConverter` (Docling in-process) et `ServeConverter` (Docling Serve distant). Settings depuis les variables d'environnement.

## Validation pipeline

**Exécuter systématiquement avant de considérer une tâche terminée :**

```bash
.venv/bin/ruff check . --fix        # 1. Lint + auto-fix
.venv/bin/ruff format .             # 2. Format
.venv/bin/ruff check .              # 3. Vérifier zéro violation
.venv/bin/ruff format --check .     # 4. Vérifier zéro diff de format
.venv/bin/pytest tests/ -v          # 5. Tous les tests passent
```

Tout nouveau code doit avoir des tests. Zéro violation tolérée.

## Conventions

- **Ruff** : rules E, W, F, I (isort), N, UP, B, SIM, TCH, RUF. Line-length 100.
- **Exceptions Ruff** : E501 ignoré, B008 ignoré (FastAPI `Depends`), N815 ignoré (camelCase Pydantic), TC003 ignoré (datetime runtime pour Pydantic).
- **Imports** : isort first-party = `api`, `domain`, `persistence`, `services`.
- **Naming** : snake_case partout en Python. camelCase uniquement dans les schemas Pydantic (contrat API).
- **Tests** : pytest-asyncio avec `asyncio_mode = auto`. Tests dans `tests/`.
- **Env vars** : voir `.env.example` à la racine. Principales : `CORS_ORIGINS`, `UPLOAD_DIR`, `DB_PATH`.