Files
Kazier/README.md
T

304 lines
8.1 KiB
Markdown

# VaultDrop — Application de Gestion de Fichiers V1
> ⚠️ **Obsolète** — cette spec décrit une V1 single-user (SQLite). Référentiel actuel : `docs/api-v1.md` (contrat API) et `V2.md` (modèle cible Postgres/ReBAC).
## Vision
Application mobile tout-en-un permettant de centraliser, organiser et retrouver ses documents. Upload depuis l'appareil, scan caméra avec OCR, tagging et recherche rapide. Le back-end Go assure le traitement asynchrone (OCR, indexing) et la persistence. Le front React Native reste léger : il affiche, interagit et met en cache.
## Scope V1
On livre un produit fonctionnel utilisable au quotidien, pas un framework. V1 = gestion de fichiers avec scan OCR intégré. Pas de mode collaboratif, pas de plugins, pas de partage avancé.
## Non-Goals (V1)
- Mode collaboratif / multi-utilisateur
- Système de plugins
- Synchronisation offline complexe
- Plateforme de partage publique
---
## Vue d'Ensemble Architecture
```
┌─────────────────────┐ ┌─────────────────────┐
│ React Native App │ ────> │ API Go Backend │
│ (Expo managed) │ HTTPS │ (REST) │
│ - Upload │ │ - Upload fichiers │
│ - Caméra / Scan │ │ - OCR async │
│ - Tags / Recherche│ │ - Index/search │
│ - Affichage │ │ - Persistance │
└─────────────────────┘ └─────────────────────┘
```
Le mobile ne contient pas de logique métier. Tout traitement lourd (OCR, extraction de texte, indexation) est géré côté back-end.
---
## Fonctionnalités Attendues
### Upload de fichiers
- Sélection depuis la galerie appareil
- Upload par drag-and-drop interne
- Support des formats : PDF, images (JPG, PNG)
- Feedback visuel pendant l'envoi (progress)
- Retry automatique en cas d'échec réseau
### Scan Documents (Caméra)
- Prise de photo depuis l'app
- Recadrage et orientation automatique
- Envoi direct vers le back-end pour OCR
- Retour du texte extrait affiché à l'utilisateur
### Tagging
- Ajout de tags manuels sur chaque fichier
- Suggestion de tags basée sur le contenu OCR
- Filtrage par tag dans la liste
### Recherche
- Recherche full-text sur le contenu OCR
- Recherche par nom de fichier
- Filtres combinés (tag + texte)
### Listing
- Liste des fichiers uploadés avec aperçu
- Tri par date, nom, tag
- Pagination côté serveur
### Partage (Optionnel, Phase Later)
- Génération de lien temporaire
- Pas prioritaire en V1
---
## Exigences UX
- UI claire et épurée, minimaliste
- Temps de réponse < 2s pour les actions principales
- Feedback immédiat sur toutes les interactions
- Pas d'écran de chargement > 3s sans spinner
- Mode offline minimal : liste des fichiers déjà chargée visible même sans réseau
---
## Attentes API REST (Back-end Go)
### Endpoints
| Méthode | Path | Description |
|---|---|---|
| GET | /api/v1/files | Liste des fichiers (pagination) |
| POST | /api/v1/files/upload | Upload d'un fichier |
| GET | /api/v1/files/:id | Détail d'un fichier |
| DELETE | /api/v1/files/:id | Suppression d'un fichier |
| GET | /api/v1/files/search?q= | Recherche full-text |
| POST | /api/v1/files/:id/tags | Ajout de tags |
| GET | /api/v1/files/:id/tags | Tags d'un fichier |
| POST | /api/v1/ocr/jobs | Soumettre un job OCR |
| GET | /api/v1/ocr/jobs/:id | Statut d'un job OCR |
| GET | /api/v1/health | Health check |
### Format de réponse standard
```json
{
"data": { ... },
"meta": {
"page": 1,
"total": 42
}
}
```
### Erreurs
```json
{
"error": {
"code": "FILE_TOO_LARGE",
"message": "Fichier dépasse la limite de 50 Mo"
}
}
```
---
## Flux de Données
```
[Capture photo] ──> [Upload API] ──> [Back-end stocke]
v
[Job OCR créé]
v (async)
[Traitement OCR]
[Extraction texte]
[Indexation search]
v
[App affiche fichier] <──── [Polling statut] <── [Résultat prêt]
```
1. L'utilisateur prend une photo ou sélectionne un fichier
2. Le fichier est uploadé vers POST /api/v1/files/upload
3. Le back-end crée un job OCR et retourne immédiatement un ID
4. L'app poll GET /api/v1/ocr/jobs/:id ou utilise un webhook
5. Une fois l'OCR terminé, le texte est indexé et le fichier apparaît avec son contenu searchable
---
## Choix Techniques
### Front-end (React Native)
- Expo managed workflow (développement rapide, build plus simple)
- TanStack Query (gestion serveur state, cache, refetch)
- React Navigation (navigation entre écrans)
- react-native-image-picker (sélection + caméra)
- MMKV (stockage clé-valeur pour cache local)
### Back-end (Go)
- Framework HTTP : Gin ou Fiber (au choix implémenteur)
- Persistance : SQLite pour V1 (volumétrie faible attendue)
- OCR : Tesseract en ligne de commande (appel système)
- Search : SQLite FTS5 pour la recherche full-text
- Stockage fichiers : disque local avec chemin référencé en base
---
## Structure de Dossiers Suggérée
### Front-end (React Native / Expo)
```
mobile/
├── app/ # Expo Router ou navigation
│ ├── index.tsx # Ecran principal (liste)
│ ├── upload.tsx # Ecran upload
│ ├── scan.tsx # Ecran scan caméra
│ └── search.tsx # Ecran recherche
├── components/
│ ├── FileCard.tsx
│ ├── TagChip.tsx
│ └── UploadProgress.tsx
├── hooks/
│ ├── useFiles.ts # TanStack Query hooks
│ ├── useSearch.ts
│ └── useUpload.ts
├── api/
│ └── client.ts # Client API (axios ou fetch)
├── types/
│ └── index.ts # Types TypeScript
├── constants/
│ └── api.ts # URLs, clés API
└── package.json
```
### Back-end (Go)
```
backend/
├── cmd/
│ └── server/
│ └── main.go # Point d'entrée
├── internal/
│ ├── handlers/ # Handlers HTTP
│ ├── models/ # Modèles de données
│ ├── repository/ # Accès données
│ ├── service/ # Logique métier
│ └── ocr/ # Module OCR
├── pkg/
│ └── api/
│ └── response.go # Helpers réponse
├── uploads/ # Fichiers stockés
├── go.mod
└── go.sum
```
---
## Getting Started
### Prérequis
- Node.js latest lts
- npm ou yarn
- Expo CLI (`npm install -g expo-cli`)
- Go latest lts
- Tesseract OCR installé (`apt install tesseract-ocr` sur Debian/Ubuntu)
### Installation (Front-end)
```bash
cd mobile
npm install
npx expo start
```
### Installation (Back-end)
```bash
cd backend
go mod download
go run cmd/server/main.go
```
### Build APK Android (Expo)
```bash
npx expo run:android --variant release
```
---
## Variables d'Environnement
### Front-end (.env)
```
API_BASE_URL=http://localhost:8080/api/v1
TESSERACT_LANG=fr+eng
```
### Back-end (.env)
```
PORT=8080
UPLOAD_DIR=./uploads
MAX_FILE_SIZE_MB=50
OCR_LANG=fra+eng
```
---
## Itérations Futures
### V2 — Fiabilité et Performance
- Remplacement SQLite par PostgreSQL
- Upload chunked pour gros fichiers
- Compression d'images côté client
### V3 — Organisation Avancée
- Dossiers virtuels / hiérarchie
- Tags suggérés par IA
- OCR multilingue amélioré
### V4 — Collaboration
- Comptes utilisateurs
- Partage avec lien temporaire
- Rôle et permissions
### V5 — Plateforme
- Système de plugins (event bus)
- API publique
- Extensions tierces
---
## Statut du Projet
Phase : Conception et prototypage
Backend Go : En cours de structuration
Frontend React Native : À initier