Service File Service
Gestion centralisée du cycle de vie des fichiers de la plateforme (KYC, KYB, photos de profil, PDFs). Upload, stockage sur Firebase Cloud Storage, signed URLs pour accès contrôlé, vérification de contenu côté plateforme.
Identité
| Attribut | Valeur |
|---|---|
| Package | @nex/service-file-service v0.0.1 |
| Port | 3000 |
| Schéma DB | file_service (PostgreSQL) |
| Swagger | services/file-service/src/main.ts:39 — actif |
| README | ✅ présent |
| Owner | @platform-team |
Responsabilité
- Réception multipart d'un fichier upload.
- Stockage sur Firebase Cloud Storage (provider
FirebaseStorageProvider,src/storage/providers/firebase-storage.provider.ts). - Génération de signed URLs avec expiration paramétrable pour accès en lecture.
- Vérification du fichier (status
verify) après revue compliance. - Téléchargement direct sécurisé via endpoint dédié.
- Génération de PDF (reçus, déclarations) via
pdfkit. - Cas d'usage spécifique : upload public pour le flow reset-pin (lien temporaire non authentifié).
Surface API
4 controllers :
| Controller | Route racine | Endpoints |
|---|---|---|
files.controller.ts | /files | 10 |
pdf.controller.ts | /pdf | 2 |
public-upload.controller.ts | /files/public-upload/reset-pin | 1 |
app.controller.ts | / | 1 (health) |
Détail /files
| Méthode | Route | Rôle |
|---|---|---|
| POST | /files | Upload multipart |
| GET | /files | Liste (admin) |
| GET | /files/me | Liste des fichiers de l'utilisateur courant |
| GET | /files/:id | Métadonnées |
| GET | /files/:id/signed-url | Signed URL pour download |
| GET | /files/:id/download | Download direct authentifié |
| PATCH | /files/:id | Mise à jour métadonnées |
| PATCH | /files/:id/verify | Marquage validation compliance |
| DELETE | /files/:id | Suppression logique |
Modèle de données
1 entity : File (src/files/entities/file.entity.ts).
Migrations (src/migrations/) :
1730000000000-CreateFileServiceSchema.js1730000000001-CreateFilesTable.js
Politique de contenu
| Aspect | Valeur |
|---|---|
| MIME types autorisés | image/jpeg, image/jpg, image/png, image/gif, application/pdf, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document |
| Taille max | 10 MB |
| Cas d'usage | photos KYC, documents KYB, justificatifs |
Stockage
Firebase Cloud Storage via SDK Firebase Admin (firebase-admin v13.5.0). Authentification serveur-à-serveur. Signed URLs avec TTL court.
À documenter / confirmer :
- Localisation des buckets (région).
- Chiffrement at-rest (par défaut Firebase, à confirmer pour scope audit).
- Politique de rétention par type de fichier.
- Droit à l'oubli RGPD : suppression effective vs soft-delete.
Ces points sont marqués dans /security/known-gaps.
Dépendances
- Intra-monorepo : aucune dépendance directe à
@nex/shared-*détectée. - Externes :
firebase-admin,@nestjs/platform-express,multer,pdfkit,uuid,typeorm,pg.
Trust boundaries
Le service est appelé via l'orchestrator. Les signed URLs Firebase sont produites côté Nex et expirent rapidement — un audit doit vérifier que la TTL est suffisamment courte pour limiter la fenêtre de fuite si l'URL est captée. À documenter dans threat-model.md (Lot 5).
Pages à produire
api.md— détail des endpoints (OpenAPI auto-généré).data-model.md— tablefiles(colonnes, indexes, FK).runbook.md— quota Firebase atteint, corruption fichier, restauration.threat-model.md— STRIDE, focus sur PII KYC/KYB.