adb-files
Rôle
Service de stockage de documents : upload, download, suppression et concaténation de fichiers (PDF principalement). Combine AWS S3 pour les binaires et MongoDB pour les métadonnées (nom, taille, propriétaire, tags, lien vers l'entité métier).
C'est un service feuille : il n'appelle aucun autre service métier. Il est consommé par presque tous les autres services qui ont besoin de stocker des documents.
Stack
| Élément | Valeur |
|---|---|
| Spring Boot | 3.1.3 |
| Java | 18 |
| Port | 8083 |
| Database | MongoDB Atlas — base adb-files |
| Object storage | AWS S3 (bucket BUCKET_FILES) |
| Auth | Keycloak (resource server) |
| Stack réactive | Spring WebFlux + Reactive MongoDB |
| Version | 0.27.0-SNAPSHOT |
Modules Maven internes
adb-files-model— DTOs et entités exposés.adb-files-app— application Spring Boot exécutable.adb-files-client— client Java consommable par les autres services.
Architecture interne
flowchart TB
Client[Client adb-*<br/>via FQDN.FILES]
subgraph adb-files
FC[FileController]
FMC[FileMetadataController]
FS[FileService]
FMS[FileMetadataService]
FF[FileFunction<br/>SQS Listener]
end
Mongo[(adb-files<br/>files)]
S3[(S3<br/>BUCKET_FILES)]
SNS[SNS topic<br/>onFileUploaded]
SQS[SQS queue<br/>onFileUploaded]
Client -->|POST /files| FC
Client -->|GET /files/:id| FC
Client -->|GET /files/metadata| FMC
FC --> FS
FMC --> FMS
FS --> S3
FS --> Mongo
FMS --> Mongo
FS -.publish.-> SNS
SNS --> SQS
SQS --> FF
FF --> Mongo
Endpoints
| Controller | Path | Rôle |
|---|---|---|
FileController | /files | Upload, download, delete, concat PDF |
FileMetadataController | /files/metadata | Métadonnées (recherche, listing, signed URLs) |
Endpoints clés
POST /files— upload multipart (renvoie un fileId).GET /files/{id}— download.DELETE /files/{id}— suppression S3 + métadonnées.GET /files/pdf?ids=a,b,c— concaténation PDF de plusieurs fichiers.GET /files/metadata/list?q=...— recherche par tag, propriétaire, etc.GET /files/metadata/diagnostics?q=...— métadonnées enrichies (utilisé paradb-views).
Modèle de données
erDiagram
FileMetaDataEntity {
string _id
string s3Key
string fileName
string mimeType
number size
string ownerPersonId
array tags
date uploadedAt
}
Une seule collection : files.
Événements
Émis (SNS)
onFileUploaded— déclenché à chaque upload réussi.onFileMetaDataModified— modification de tags ou métadonnées.
Consommés (SQS Listeners)
onFileUploaded— auto-listening pour traitements asynchrones (extraction OCR, génération de thumbnails, etc.).
DLQ : ${FILES_DLQ_TOPIC}.
Dépendances inter-services
flowchart LR
files[adb-files]
s3[(AWS S3)]
files --> s3
persons[adb-persons] -->|GET /files| files
contracts[adb-contracts] -->|POST/GET/DELETE /files| files
accounting[adb-accounting] -->|POST/GET /files| files
aggregates[adb-aggregates] -->|GET /files/metadata/list| files
views[adb-views] -->|GET /files/metadata/diagnostics| files
reports[adb-reports] -.via aggregates.-> files
adb-files n'appelle aucun autre service métier (ne consomme pas de FQDN).
Configuration & déploiement
Variables d'environnement
| Variable | Rôle |
|---|---|
MONGO_DB_URI | Connection string MongoDB |
SECURITY_ISSUER_URI / SECURITY_TOKEN_URI | Keycloak |
CLIENT_ID / CLIENT_SECRET | OAuth2 |
AWS_REGION (eu-west-1) | AWS region |
AWS_ACCESS_KEY / AWS_SECRET_KEY | Credentials AWS |
BUCKET_FILES | Bucket S3 (ex : dev.files.life-connect.fr) |
FILES_FILE_UPLOADED_QUEUE | URL queue SQS |
FILES_DLQ_TOPIC | Dead-letter queue |
Chart Helm
adb-charts/charts/services/templates/adb-files.yaml. Image : lifeconnect/adb-files.
Liens
- Code :
adb-files/ - Doc fonctionnelle :
technical-epics/files/