chore: add husky pre-commit hook and lint-staged configuration
- Created a pre-commit hook in .husky to run lint-staged. - Added .lintstagedrc.mjs to format frontend files with Prettier and apply Spotless to backend Java files. - Introduced .prettierignore to exclude specific directories from formatting.
This commit is contained in:
1 parent
5d2d85aa8c
commit
878da155bd
564 files changed
+61467
-47179
No files matched your search
@@ -19,10 +19,10 @@ All uploaded photos (for property condition reports) are compressed and resized
|
||||
|
||||
- **Rejected Applicants**: Complete deletion of all submitted documents (payslips, identity documents) exactly 30 days after rejection.
|
||||
- **Archived Leases**:
|
||||
- Upon lease termination, the lease transitions to an `Archived` state.
|
||||
- Personal identity documents and income proofs of the former tenants are permanently purged 3 years after lease termination (matching the 3-year French statute of limitations for residential tenancy disputes).
|
||||
- General inspection photos are purged 5 years after lease termination.
|
||||
- Basic accounting records (rent ledger, invoice amounts) are retained for 10 years to comply with commercial and tax record retention laws (Article L123-22 of the French Commercial Code).
|
||||
- Upon lease termination, the lease transitions to an `Archived` state.
|
||||
- Personal identity documents and income proofs of the former tenants are permanently purged 3 years after lease termination (matching the 3-year French statute of limitations for residential tenancy disputes).
|
||||
- General inspection photos are purged 5 years after lease termination.
|
||||
- Basic accounting records (rent ledger, invoice amounts) are retained for 10 years to comply with commercial and tax record retention laws (Article L123-22 of the French Commercial Code).
|
||||
|
||||
---
|
||||
|
||||
@@ -52,8 +52,8 @@ Assuming an average lease turnover rate of 2 years (i.e., 1.5 lease cycles per y
|
||||
- **Year 1**: 3 * (5 MB tenant docs + 15 MB photos) + 15 MB operational files = **75 MB**.
|
||||
- **Yearly Growth (Before Purges)**: 15 MB (ops) + 1.5 * (5 MB tenant docs + 30 MB in/out photos) = **67.5 MB / year**.
|
||||
- **Purging Offsets**:
|
||||
- _From Year 4 onwards_: Purge of tenant dossiers of expired leases saves **7.5 MB / year** (1.5 leases * 5 MB).
|
||||
- _From Year 6 onwards_: Purge of inspection photos of expired leases saves **45.0 MB / year** (1.5 leases * 30 MB).
|
||||
- _From Year 4 onwards_: Purge of tenant dossiers of expired leases saves **7.5 MB / year** (1.5 leases * 5 MB).
|
||||
- _From Year 6 onwards_: Purge of inspection photos of expired leases saves **45.0 MB / year** (1.5 leases * 30 MB).
|
||||
- **Year 10 Cumulative Footprint**: **~345 MB** (Stabilizes and plates out around 350 MB due to continuous purges).
|
||||
|
||||
This architecture saves over **97% of server disk space** over a 10-year lifecycle compared to a naive storage strategy, while strictly respecting French GDPR constraints.
|
||||
@@ -41,21 +41,21 @@ Le JDK seul échoue donc sur deux exigences du ticket : WebP et auto-orientation
|
||||
|
||||
### Capacités réelles
|
||||
|
||||
| Sujet | Comportement vérifié |
|
||||
|---|---|
|
||||
| Formats d'entrée | Ceux des lecteurs ImageIO présents : avec le JDK et `webp-imageio`, BMP, GIF, JPEG, PNG, TIFF, WBMP et WebP. Le type MIME et l'extension ne sont pas nécessaires à la sélection du lecteur. HEIC/HEIF et AVIF ne sont pas décodés par cette combinaison. |
|
||||
| WebP en sortie | Oui, lossy ou lossless. Le plug-in enregistre un `ImageWriter` ImageIO WebP. |
|
||||
| Qualité 75 | Oui. Thumbnailator transmet `0.75f` à `ImageWriteParam.setCompressionQuality`; `WebPWriteParam` multiplie cette valeur par 100 pour libwebp. Il faut conserver le type de compression `Lossy`. |
|
||||
| Orientation EXIF | Oui pour les huit valeurs d'orientation JPEG. Activée par défaut dans Thumbnailator et activable explicitement avec `useExifOrientation(true)`. Le code ajoute la rotation/réflexion avant les autres filtres et échange les dimensions pour les orientations 5 à 8. |
|
||||
| Portée EXIF | JPEG surtout : le parseur lit l'arbre natif JPEG et son repli capture le segment APP1. Le lecteur usefulness retourne toujours `null` pour les métadonnées WebP ; un WebP portant une orientation EXIF ne sera donc pas réorienté par cette combinaison. |
|
||||
| Métadonnées de sortie | Supprimées : Thumbnailator appelle l'écrivain avec `new IIOImage(img, null, null)` et l'écrivain usefulness retourne `null` pour ses métadonnées par défaut/conversion. Le WebP produit ne reprend donc ni EXIF, ni XMP, ni GPS, ni miniature. |
|
||||
| Animation | Thumbnailator lit l'image 0. Son usage ordinaire aplatit donc un GIF multipage sur sa première image. Le lecteur usefulness annonce toujours une seule image et n'expose pas l'animation WebP. Il n'y a pas de rejet automatique uniforme des animations. |
|
||||
| Redimensionnement | Conservation du ratio et filtres de redimensionnement fournis. Attention : `size(1920, 1080)` peut agrandir ; le non-upscaling nécessite le `min(1, ...)` explicite. |
|
||||
| Dépendances natives | `webp-imageio` utilise JNI et embarque libwebp. Binaires présents pour Linux x86, x86_64, ARM/ARMv6/ARMv7/AArch64, PPC64 ; macOS x86_64/AArch64 ; Windows x86/x86_64. Aucun paquet système libwebp n'est à installer sur ces cibles. |
|
||||
| Java/JDK | Thumbnailator 0.4.21 produit un JAR Java ancien et sans dépendance runtime propre. `webp-imageio` annonce Java 11, cible un bytecode ancien et teste actuellement les JDK 17, 21 et 24. Java 25 n'est pas déclaré dans sa matrice ; sa compatibilité doit donc rester couverte par un test d'intégration du projet sous le JDK 25 réel. Aucune intégration Spring spécifique n'est requise. |
|
||||
| Licences | Thumbnailator : MIT. usefulness/webp-imageio : Apache-2.0 ; binaires libwebp sous la licence du projet libwebp. |
|
||||
| Maintenance | Thumbnailator 0.4.21 a été publié le 1er octobre 2025 et son dépôt reste actif en 2026. usefulness/webp-imageio 0.11.0 a été publié le 15 juin 2026 avec libwebp 1.6.0. |
|
||||
| Limites/protections | Aucun plafond de pixels documenté. Le lecteur usefulness met le flux WebP compressé entier dans un `byte[]`, refuse seulement une longueur connue supérieure à `Integer.MAX_VALUE`, puis alloue le raster décodé. Thumbnailator contient un mécanisme optionnel de sous-échantillonnage dépendant de la mémoire libre, mais ce n'est ni une validation d'upload ni une limite contractuelle. |
|
||||
| Sujet | Comportement vérifié |
|
||||
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Formats d'entrée | Ceux des lecteurs ImageIO présents : avec le JDK et `webp-imageio`, BMP, GIF, JPEG, PNG, TIFF, WBMP et WebP. Le type MIME et l'extension ne sont pas nécessaires à la sélection du lecteur. HEIC/HEIF et AVIF ne sont pas décodés par cette combinaison. |
|
||||
| WebP en sortie | Oui, lossy ou lossless. Le plug-in enregistre un `ImageWriter` ImageIO WebP. |
|
||||
| Qualité 75 | Oui. Thumbnailator transmet `0.75f` à `ImageWriteParam.setCompressionQuality`; `WebPWriteParam` multiplie cette valeur par 100 pour libwebp. Il faut conserver le type de compression `Lossy`. |
|
||||
| Orientation EXIF | Oui pour les huit valeurs d'orientation JPEG. Activée par défaut dans Thumbnailator et activable explicitement avec `useExifOrientation(true)`. Le code ajoute la rotation/réflexion avant les autres filtres et échange les dimensions pour les orientations 5 à 8. |
|
||||
| Portée EXIF | JPEG surtout : le parseur lit l'arbre natif JPEG et son repli capture le segment APP1. Le lecteur usefulness retourne toujours `null` pour les métadonnées WebP ; un WebP portant une orientation EXIF ne sera donc pas réorienté par cette combinaison. |
|
||||
| Métadonnées de sortie | Supprimées : Thumbnailator appelle l'écrivain avec `new IIOImage(img, null, null)` et l'écrivain usefulness retourne `null` pour ses métadonnées par défaut/conversion. Le WebP produit ne reprend donc ni EXIF, ni XMP, ni GPS, ni miniature. |
|
||||
| Animation | Thumbnailator lit l'image 0. Son usage ordinaire aplatit donc un GIF multipage sur sa première image. Le lecteur usefulness annonce toujours une seule image et n'expose pas l'animation WebP. Il n'y a pas de rejet automatique uniforme des animations. |
|
||||
| Redimensionnement | Conservation du ratio et filtres de redimensionnement fournis. Attention : `size(1920, 1080)` peut agrandir ; le non-upscaling nécessite le `min(1, ...)` explicite. |
|
||||
| Dépendances natives | `webp-imageio` utilise JNI et embarque libwebp. Binaires présents pour Linux x86, x86_64, ARM/ARMv6/ARMv7/AArch64, PPC64 ; macOS x86_64/AArch64 ; Windows x86/x86_64. Aucun paquet système libwebp n'est à installer sur ces cibles. |
|
||||
| Java/JDK | Thumbnailator 0.4.21 produit un JAR Java ancien et sans dépendance runtime propre. `webp-imageio` annonce Java 11, cible un bytecode ancien et teste actuellement les JDK 17, 21 et 24. Java 25 n'est pas déclaré dans sa matrice ; sa compatibilité doit donc rester couverte par un test d'intégration du projet sous le JDK 25 réel. Aucune intégration Spring spécifique n'est requise. |
|
||||
| Licences | Thumbnailator : MIT. usefulness/webp-imageio : Apache-2.0 ; binaires libwebp sous la licence du projet libwebp. |
|
||||
| Maintenance | Thumbnailator 0.4.21 a été publié le 1er octobre 2025 et son dépôt reste actif en 2026. usefulness/webp-imageio 0.11.0 a été publié le 15 juin 2026 avec libwebp 1.6.0. |
|
||||
| Limites/protections | Aucun plafond de pixels documenté. Le lecteur usefulness met le flux WebP compressé entier dans un `byte[]`, refuse seulement une longueur connue supérieure à `Integer.MAX_VALUE`, puis alloue le raster décodé. Thumbnailator contient un mécanisme optionnel de sous-échantillonnage dépendant de la mémoire libre, mais ce n'est ni une validation d'upload ni une limite contractuelle. |
|
||||
|
||||
Sources primaires :
|
||||
|
||||
|
||||
@@ -56,12 +56,12 @@ Source : [politique de sécurité ImageMagick et exemple complet](https://imagem
|
||||
|
||||
## Comparaison
|
||||
|
||||
| Option | Pipeline complet | Pérennité observable | Sécurité et ressources | Coût d'intégration | Verdict |
|
||||
|---|---|---|---|---|---|
|
||||
| **ImageMagick 7 CLI** | Oui, en une commande | ImageMagick Studio LLC, 277 versions, publication active en juillet 2026 | Politique fine : formats, chemins, délégués, mémoire, disque, dimensions, séquences, temps | Un paquet système, un appel `ProcessBuilder`, un `policy.xml` | **Recommandé** |
|
||||
| **libvips / `vipsthumbnail`** | Oui, en une commande | Projet actif, 102 versions, utilisé notamment par Mastodon, Sharp, Rails et MediaWiki | Faible mémoire, blocage des opérations non fiables et dimension maximale ; garde-fous moins complets qu'ImageMagick au niveau CLI | Un paquet système et un appel `ProcessBuilder` | Excellente alternative si les mesures montrent qu'ImageMagick consomme trop |
|
||||
| **`cwebp` officiel** | Non | Implémentation de référence WebP publiée par Google, API documentée en version 1.6.0 | Option `-low_memory`, mais pas de politique complète de décodage/upload | Nécessite du code ou un second outil pour lire l'orientation et calculer la taille | Ne pas retenir seul |
|
||||
| **Bibliothèques Java ImageIO** | Non | TwelveMonkeys est établi et actif | Décodage dans le processus JVM ; pas de politique équivalente | WebP TwelveMonkeys est en lecture seule ; un autre encodeur reste nécessaire | Ne résout pas le problème de dépendance |
|
||||
| Option | Pipeline complet | Pérennité observable | Sécurité et ressources | Coût d'intégration | Verdict |
|
||||
| ------------------------------ | -------------------- | ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
|
||||
| **ImageMagick 7 CLI** | Oui, en une commande | ImageMagick Studio LLC, 277 versions, publication active en juillet 2026 | Politique fine : formats, chemins, délégués, mémoire, disque, dimensions, séquences, temps | Un paquet système, un appel `ProcessBuilder`, un `policy.xml` | **Recommandé** |
|
||||
| **libvips / `vipsthumbnail`** | Oui, en une commande | Projet actif, 102 versions, utilisé notamment par Mastodon, Sharp, Rails et MediaWiki | Faible mémoire, blocage des opérations non fiables et dimension maximale ; garde-fous moins complets qu'ImageMagick au niveau CLI | Un paquet système et un appel `ProcessBuilder` | Excellente alternative si les mesures montrent qu'ImageMagick consomme trop |
|
||||
| **`cwebp` officiel** | Non | Implémentation de référence WebP publiée par Google, API documentée en version 1.6.0 | Option `-low_memory`, mais pas de politique complète de décodage/upload | Nécessite du code ou un second outil pour lire l'orientation et calculer la taille | Ne pas retenir seul |
|
||||
| **Bibliothèques Java ImageIO** | Non | TwelveMonkeys est établi et actif | Décodage dans le processus JVM ; pas de politique équivalente | WebP TwelveMonkeys est en lecture seule ; un autre encodeur reste nécessaire | Ne résout pas le problème de dépendance |
|
||||
|
||||
## Détail : libvips
|
||||
|
||||
|
||||
Reference in new issue
Block a user