222 lines
6.3 KiB
Markdown
222 lines
6.3 KiB
Markdown
# 📋 Spécification Technique - Implémentation Lazy Loading Production
|
|
|
|
## 🎯 Objectif
|
|
Implémenter le lazy loading pour les factures avec une solution **production-ready** incluant :
|
|
- Gestion d'erreurs robuste
|
|
- Logging approprié
|
|
- Tests unitaires et d'intégration
|
|
- Documentation complète
|
|
- Compatibilité backend/frontend
|
|
|
|
---
|
|
|
|
## 🏗️ Architecture
|
|
|
|
### Composants à Créer/Modifier
|
|
|
|
#### Frontend (btpxpress-client)
|
|
1. **FactureLazyDataModel** - Nouveau
|
|
2. **FactureService** - Modifier (ajouter méthodes lazy)
|
|
3. **BtpXpressApiClient** - Modifier (ajouter endpoints lazy)
|
|
4. **FactureView** - Modifier (utiliser LazyDataModel)
|
|
5. **factures.xhtml** - Modifier (activer lazy loading)
|
|
|
|
#### Backend (btpxpress-server)
|
|
1. **FactureResource** - Modifier (ajouter endpoints lazy)
|
|
2. **FactureService** - Modifier (ajouter méthodes paginées)
|
|
3. **FactureRepository** - Modifier (ajouter requêtes paginées)
|
|
|
|
---
|
|
|
|
## 📊 Flux de Données
|
|
|
|
```
|
|
[factures.xhtml]
|
|
↓ (lazy=true, rows=10)
|
|
[FactureView + LazyDataModel]
|
|
↓ (load(first, pageSize, sortBy, filterBy))
|
|
[FactureService]
|
|
↓ (getFacturesLazy(params))
|
|
[BtpXpressApiClient]
|
|
↓ (HTTP GET /api/v1/factures/lazy?offset=0&limit=10&...)
|
|
[Backend FactureResource]
|
|
↓ (getFacturesLazy(offset, limit, ...))
|
|
[Backend FactureService]
|
|
↓ (findFacturesLazy(offset, limit, ...))
|
|
[Backend FactureRepository]
|
|
↓ (Panache query with pagination)
|
|
[Database]
|
|
```
|
|
|
|
---
|
|
|
|
## 🔧 Détails d'Implémentation
|
|
|
|
### 1. Backend - FactureRepository
|
|
|
|
**Méthodes à ajouter** :
|
|
```java
|
|
/**
|
|
* Compte le nombre total de factures avec filtres optionnels
|
|
*/
|
|
public long countFactures(String filtreNumero, String filtreClient, String filtreStatut);
|
|
|
|
/**
|
|
* Récupère les factures avec pagination, tri et filtres
|
|
*/
|
|
public List<Facture> findFacturesLazy(
|
|
int offset,
|
|
int limit,
|
|
String sortField,
|
|
String sortOrder,
|
|
String filtreNumero,
|
|
String filtreClient,
|
|
String filtreStatut
|
|
);
|
|
```
|
|
|
|
### 2. Backend - FactureService
|
|
|
|
**Méthodes à ajouter** :
|
|
```java
|
|
/**
|
|
* Récupère les factures avec pagination
|
|
* @return DTO contenant les factures et le total
|
|
*/
|
|
public FacturePageDTO getFacturesLazy(FactureFilterDTO filters);
|
|
|
|
/**
|
|
* Compte les factures avec filtres
|
|
*/
|
|
public long countFactures(FactureFilterDTO filters);
|
|
```
|
|
|
|
### 3. Backend - FactureResource
|
|
|
|
**Endpoints à ajouter** :
|
|
```java
|
|
@GET
|
|
@Path("/lazy")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
public Response getFacturesLazy(
|
|
@QueryParam("offset") @DefaultValue("0") int offset,
|
|
@QueryParam("limit") @DefaultValue("10") int limit,
|
|
@QueryParam("sortField") String sortField,
|
|
@QueryParam("sortOrder") @DefaultValue("ASC") String sortOrder,
|
|
@QueryParam("filter_numero") String filtreNumero,
|
|
@QueryParam("filter_client") String filtreClient,
|
|
@QueryParam("filter_statut") String filtreStatut
|
|
);
|
|
|
|
@GET
|
|
@Path("/count")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
public Response countFactures(
|
|
@QueryParam("filter_numero") String filtreNumero,
|
|
@QueryParam("filter_client") String filtreClient,
|
|
@QueryParam("filter_statut") String filtreStatut
|
|
);
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ Critères d'Acceptation
|
|
|
|
### Fonctionnels
|
|
- [ ] La liste des factures charge seulement 10-50 items par page
|
|
- [ ] La pagination fonctionne correctement (première, précédente, suivante, dernière page)
|
|
- [ ] Le tri fonctionne sur toutes les colonnes triables
|
|
- [ ] Les filtres fonctionnent et sont appliqués côté serveur
|
|
- [ ] Le compteur total affiche le bon nombre de factures
|
|
- [ ] Les performances sont améliorées (temps de chargement <500ms)
|
|
|
|
### Techniques
|
|
- [ ] Gestion d'erreurs complète (try-catch, logging)
|
|
- [ ] Validation des paramètres (offset >= 0, limit > 0, etc.)
|
|
- [ ] Logs appropriés (DEBUG, INFO, WARN, ERROR)
|
|
- [ ] Code commenté et documenté
|
|
- [ ] Tests unitaires (couverture >80%)
|
|
- [ ] Tests d'intégration
|
|
- [ ] Pas de régression sur les fonctionnalités existantes
|
|
|
|
### Sécurité
|
|
- [ ] Validation côté serveur de tous les paramètres
|
|
- [ ] Protection contre SQL injection
|
|
- [ ] Vérification des droits d'accès
|
|
- [ ] Limitation du nombre max d'items par page (ex: 100)
|
|
|
|
---
|
|
|
|
## 🧪 Plan de Tests
|
|
|
|
### Tests Unitaires
|
|
|
|
#### Frontend
|
|
- `FactureLazyDataModel.load()` - Cas nominal
|
|
- `FactureLazyDataModel.load()` - Avec filtres
|
|
- `FactureLazyDataModel.load()` - Avec tri
|
|
- `FactureLazyDataModel.count()` - Cas nominal
|
|
- `FactureLazyDataModel` - Gestion d'erreurs
|
|
|
|
#### Backend
|
|
- `FactureRepository.findFacturesLazy()` - Pagination
|
|
- `FactureRepository.findFacturesLazy()` - Tri
|
|
- `FactureRepository.findFacturesLazy()` - Filtres
|
|
- `FactureRepository.countFactures()` - Avec/sans filtres
|
|
- `FactureService.getFacturesLazy()` - Cas nominal
|
|
- `FactureService.getFacturesLazy()` - Gestion d'erreurs
|
|
|
|
### Tests d'Intégration
|
|
- Chargement de la première page
|
|
- Navigation entre les pages
|
|
- Tri par différentes colonnes
|
|
- Application de filtres multiples
|
|
- Gestion d'erreurs réseau
|
|
- Performance (temps de réponse <500ms)
|
|
|
|
---
|
|
|
|
## 📝 Checklist d'Implémentation
|
|
|
|
### Phase 1 : Backend (Priorité 1)
|
|
- [ ] Créer DTOs (FactureFilterDTO, FacturePageDTO)
|
|
- [ ] Implémenter FactureRepository.findFacturesLazy()
|
|
- [ ] Implémenter FactureRepository.countFactures()
|
|
- [ ] Implémenter FactureService.getFacturesLazy()
|
|
- [ ] Implémenter FactureResource endpoints
|
|
- [ ] Tests unitaires backend
|
|
- [ ] Tests d'intégration backend
|
|
|
|
### Phase 2 : Frontend (Priorité 2)
|
|
- [ ] Créer FactureLazyDataModel
|
|
- [ ] Modifier BtpXpressApiClient
|
|
- [ ] Modifier FactureService
|
|
- [ ] Modifier FactureView
|
|
- [ ] Modifier factures.xhtml
|
|
- [ ] Tests unitaires frontend
|
|
|
|
### Phase 3 : Tests & Documentation (Priorité 3)
|
|
- [ ] Tests end-to-end
|
|
- [ ] Tests de performance
|
|
- [ ] Documentation technique
|
|
- [ ] Documentation utilisateur
|
|
- [ ] Revue de code
|
|
|
|
---
|
|
|
|
## 🚨 Risques et Mitigation
|
|
|
|
| Risque | Impact | Probabilité | Mitigation |
|
|
|--------|--------|-------------|------------|
|
|
| Incompatibilité backend | Élevé | Faible | Vérifier version Panache, tester avec données réelles |
|
|
| Performance dégradée | Élevé | Moyen | Indexer colonnes de tri/filtre, optimiser requêtes |
|
|
| Régression fonctionnelle | Moyen | Moyen | Tests complets avant déploiement |
|
|
| Erreurs réseau | Moyen | Faible | Gestion d'erreurs robuste, retry logic |
|
|
|
|
---
|
|
|
|
**Version** : 1.0
|
|
**Date** : 2025-12-29
|
|
**Statut** : Prêt pour implémentation
|
|
|