dahoud
00b981c510
fix(backend): corriger format log UUID dans OrganisationResource
...
Erreur corrigée : UUID passé à %d (entier) au lieu de %s (string)
- OrganisationResource.java:227 : LOG.infof(..., %s, id)
Note : 36 tests échouent encore (problèmes d'auth, validation, NPE)
Couverture actuelle : 50% (objectif 100% reporté)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-03-18 02:08:27 +00:00
dahoud
d15324bd41
feat(backend): ajout export PDF pour les membres
...
Nouveau format d'export :
- GET /api/membres/export?format=PDF - Export membres en PDF (OpenPDF)
- Support formats : EXCEL, CSV, PDF (dans MembreResource)
MembreImportExportService :
- exporterVersPDF() : 193 lignes, génération PDF professionnelle
* Document A4 landscape pour + de colonnes
* Titre + métadonnées (date, total)
* Table avec colonnes configurables (PERSO, CONTACT, ADHESION, ORGANISATION)
* Styles : headers (bleu foncé, blanc), données (noir, aligné)
* Page statistiques optionnelle (total, actifs/inactifs/suspendus, orgs)
- Méthodes helper : createHeaderCell, createDataCell, createStatsCell, ajouterStatistiquesPDF
MembreService :
- exporterVersPDF() : délégation vers MembreImportExportService
MembreResource :
- Mise à jour endpoint /export : if ("PDF".equalsIgnoreCase(format))
- Content-Type: application/pdf
- Filename: membres_export_YYYY-MM-DD.pdf
Correctifs imports :
- Résolution conflits OpenPDF vs Apache POI (List, Row, Font)
- Imports spécifiques : com.lowagie.text.Font, Document, PdfPTable, etc.
- Qualification complète pour éviter ambiguïtés (java.util.List vs com.lowagie.text.List)
Résultat : Export membres en 3 formats (EXCEL, CSV, PDF) ✅
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-03-17 08:40:29 +00:00
dahoud
1c096f0ee1
feat(backend): ajout 8 endpoints manquants workflow financier
...
Endpoints ajoutés :
- POST /api/finance/approvals - requestApproval (avec organizationId)
- GET /api/finance/approvals/history - historique filtrable
- PUT /api/finance/budgets/{id} - updateBudget (name, description, status)
- DELETE /api/finance/budgets/{id} - deleteBudget (soft delete)
- GET /api/finance/stats - statistiques workflow global
- GET /api/finance/audit-logs - logs d'audit filtrables
- GET /api/finance/audit-logs/anomalies - détection anomalies
- POST /api/finance/audit-logs/export - export CSV/PDF
Services :
- ApprovalService.requestApproval() : logique niveaux LEVEL1/2/3 selon montant
- ApprovalService.getApprovalsHistory() : filtres date + statut
- BudgetService.updateBudget() : validation statut + approbation
- BudgetService.deleteBudget() : soft delete (actif=false)
Notes :
- Niveau approbation : <100K=NONE, 100K-1M=LEVEL1, 1M-5M=LEVEL2, >5M=LEVEL3
- organizationId optionnel dans requestApproval (pas de récup auto depuis Membre)
- FinanceWorkflowResource créé pour stats/audit (implémentation stub)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-03-16 21:17:18 +00:00
dahoud
a7bcaf9277
feat(backend): endpoints inscriptions + feedback événements
...
Ajoute infrastructure complète pour gérer inscriptions et feedbacks événements.
## Entités
- FeedbackEvenement : note 1-5, commentaire, modération (PUBLIE/EN_ATTENTE/REJETE)
- InscriptionEvenement : déjà existait, utilisation ajoutée
## Repositories
- InscriptionEvenementRepository : findByMembreAndEvenement, findByEvenement, countConfirmees, isMembreInscrit
- FeedbackEvenementRepository : findByMembreAndEvenement, findPubliesByEvenement, calculateAverageNote
## Service (EvenementService)
Inscriptions :
- inscrireEvenement() : vérifie capacité, crée inscription CONFIRMEE
- desinscrireEvenement() : soft delete inscription
- getParticipants() : liste inscriptions confirmées
- getMesInscriptions() : inscriptions du membre connecté
Feedbacks :
- soumetteFeedback() : note 1-5 + commentaire, vérifie participation, événement terminé
- getFeedbacks() : liste feedbacks publiés
- getStatistiquesFeedback() : note moyenne + nombre feedbacks
## REST Endpoints (6 total)
Inscriptions :
- POST /api/evenements/{id}/inscriptions - S'inscrire
- DELETE /api/evenements/{id}/inscriptions - Se désinscrire
- GET /api/evenements/{id}/participants - Liste participants
- GET /api/evenements/mes-inscriptions - Mes inscriptions
Feedbacks :
- POST /api/evenements/{id}/feedback - Soumettre feedback (note+commentaire)
- GET /api/evenements/{id}/feedbacks - Liste feedbacks + stats
## Database
- Migration V7 : table feedbacks_evenement
- Contrainte unique: un feedback par membre/événement
- Index: membre_id, evenement_id, date_feedback, moderation_statut
Débloquer fonctionnalités événements mobile.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-03-16 20:11:03 +00:00
dahoud
3be01e28a7
feat(backend): implémentation complète du système de messagerie
...
Ajoute l'infrastructure backend complète pour les conversations et messages :
## Entités
- Conversation : conversations individuelles, groupes, broadcast, annonces
- Message : messages avec statut, priorité, pièces jointes, soft delete
## Repositories
- ConversationRepository : findByParticipant, findByIdAndParticipant (sécurité)
- MessageRepository : findByConversation, countUnread, markAsRead
## Services
- ConversationService : CRUD conversations, archive, mute, pin
- MessageService : send, edit, delete, getMessages
## REST Endpoints (12 total)
- GET /api/conversations - Lister mes conversations
- GET /api/conversations/{id} - Récupérer une conversation
- POST /api/conversations - Créer conversation
- PUT /api/conversations/{id}/archive - Archiver
- PUT /api/conversations/{id}/mark-read - Marquer comme lu
- PUT /api/conversations/{id}/toggle-mute - Activer/désactiver son
- PUT /api/conversations/{id}/toggle-pin - Épingler
- GET /api/messages?conversationId=X - Lister messages
- POST /api/messages - Envoyer message
- PUT /api/messages/{id} - Éditer message
- DELETE /api/messages/{id} - Supprimer message
## Database
- Migration V6 : tables conversations, messages, conversation_participants
- Indexes sur organisation, type, archived, deleted pour performance
## Sécurité
- SecuriteHelper.resolveMembreId() : résolution membre depuis JWT
- Vérification accès conversation avant toute opération
- @RolesAllowed sur tous les endpoints
Débloquer la fonctionnalité Communication mobile (actuellement 100% stubs).
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-03-16 06:39:39 +00:00
dahoud
f5271cc29e
feat(admin): sécurité ADMIN_ORGANISATION pour import/création membres
...
Implémente la sécurité au niveau Resource pour ADMIN_ORGANISATION :
les utilisateurs avec ce rôle ne peuvent gérer que les membres
de leurs organisations.
MembreService.java:
- Ajout listerMembresParOrganisations(orgIds, page, sort)
* Filtre membres par liste d'organisations avec JOIN
* Support pagination et tri
* Retourne liste vide si orgIds vide
- Ajout lierMembreOrganisationEtIncrementerQuota(membre, orgId, typeMembreDefaut)
* Crée MembreOrganisation avec statut ACTIF ou EN_ATTENTE_VALIDATION
* Incrémente quota si souscription active existe
* Gère statut selon typeMembreDefaut fourni
MembreResource.java:
- Injection OrganisationService + import Organisation entity
- GET /api/membres: sécurisé pour ADMIN_ORGANISATION
* ADMIN_ORGANISATION: filtre par ses organisations uniquement
* Utilise listerMembresParOrganisations()
* ADMIN/SUPER_ADMIN: accès complet (inchangé)
- POST /api/membres: sécurisé pour ADMIN_ORGANISATION
* @RolesAllowed: ADMIN, SUPER_ADMIN, ADMIN_ORGANISATION, MEMBRE
* ADMIN_ORGANISATION: require organisationId + validation accès
* Appelle lierMembreOrganisationEtIncrementerQuota()
* ADMIN/SUPER_ADMIN: fonctionnement inchangé
- POST /api/membres/import: sécurisé pour ADMIN_ORGANISATION
* ADMIN_ORGANISATION: require organisationId + validation accès
* Retourne 403 si tentative d'accès à org non autorisée
* Retourne 400 si organisationId manquant
Spec: admin-org-membres-import-quota.md
Critères acceptation: 8/8 ✅
- Filtrage liste membres par organisation
- Création membre avec organisationId obligatoire
- Import Excel avec orgId obligatoire
- Validation accès organisation
- Format Excel validé (déjà implémenté)
- Quota vérifié (déjà implémenté)
- Membres liés à org (déjà implémenté)
- Quota incrémenté (déjà implémenté)
Tâche: #56 - Implémenter Spec Admin Import Membres
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-03-16 06:07:56 +00:00
dahoud
347d89cc02
feat(backend): consolidation finale Spec 001 LCB-FT + Flyway V1-V5
...
Migrations Flyway (consolidées) :
- V1 : Schéma complet (69 tables, 1322 lignes)
- V2 : Colonnes BaseEntity (cree_par, modifie_par)
- V3 : Colonnes métier manquantes (adresses, alert_configuration)
- V4 : Correction system_logs (renommage colonnes, ajout timestamp)
- V5 : Nettoyage alert_configuration (suppression colonnes obsolètes)
- Suppression V2-V6 obsolètes (fragmentés)
Entités LCB-FT :
- AlerteLcbFt : Alertes anti-blanchiment
- AlertConfiguration : Configuration alertes
- SystemAlert : Alertes système
- SystemLog : Logs techniques (DÉJÀ COMMITÉE avec super.onCreate fix)
Services LCB-FT (T015, T016) :
- AlerteLcbFtService + Resource : Dashboard alertes admin
- AlertMonitoringService : Surveillance transactions
- SystemLoggingService : Logs centralisés
- FileStorageService : Upload documents
Repositories :
- AlerteLcbFtRepository
- AlertConfigurationRepository
- SystemAlertRepository
- SystemLogRepository
Tests :
- GlobalExceptionMapperTest : 17 erreurs corrigées (toResponse())
Spec 001 : 27/27 tâches (100%)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-03-16 05:15:17 +00:00
dahoud
d8e3f23ec4
fix(entity): appeler super.onCreate() dans SystemLog pour peupler dateCreation
...
Problème : SystemLog override @PrePersist sans appeler parent
Conséquence : dateCreation restait NULL → erreur PostgreSQL constraint violation
Solution : Ajout super.onCreate() pour déclencher BaseEntity.onCreate()
Fixes: null value in column date_creation violates not-null constraint
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com >
2026-03-16 05:14:04 +00:00
dahoud
75a19988b0
Sync: code local unifié
...
Synchronisation du code source local (fait foi).
Signed-off-by: lions dev Team
2026-03-15 16:25:40 +00:00
dahoud
e82dc356f3
fix: ParametresLcbFtService compilation errors
...
Corrections pour T027 (tests backend):
- Logger.getLogger(*.class) au lieu de *.java
- Builder pattern: setters pour champs BaseResponse hérités
Impact: Compilation 100% réussie, tests 1167/1168 passent
Signed-off-by: lions dev Team
2026-03-15 04:50:06 +00:00
dahoud
eb729bdc56
feat(backend): Phase 3 - Service et Resource LCB-FT (Spec 001)
...
Implémentation backend pour conformité anti-blanchiment :
1. ParametresLcbFtService
- getParametres() : récupération params par org/devise
- getSeuilJustification() : seuil rapide (avec cache)
- saveOrUpdateParametres() : CRUD admin
- Cache Quarkus pour performance
- Fallback 500k XOF par défaut
2. ParametresLcbFtResource
- GET /api/parametres-lcb-ft : params complets (@PermitAll)
- GET /api/parametres-lcb-ft/seuil-justification : seuil léger
- POST /api/parametres-lcb-ft : CRUD admin (@RolesAllowed)
- OpenAPI/Swagger documentation complète
3. Validation existante confirmée
- TransactionEpargneService.validerLcbFtSiSeuilAtteint()
- Audit LCB-FT via AuditService.logLcbFtSeuilAtteint()
Phase 3 : 67% complété (4/6 tâches, 2 optionnelles skip)
- T012 ✅ Service paramètres
- T013 ✅ Validation seuils (existante)
- T014 ✅ Audit opérations (existant)
- T017 ✅ Endpoint REST mobile
- T015 ⏩ Optionnel (KYC crédit)
- T016 ⏩ Optionnel (alertes)
Spec : specs/001-mutuelles-anti-blanchiment/spec.md
Branche : 001-mutuelles-anti-blanchiment
Signed-off-by: lions dev Team
2026-03-15 02:31:35 +00:00
dahoud
a1e30b51fb
feat(dashboard): cotisations tout temps + synthèse membre
...
- CotisationRepository: calculerTotalCotisationsPayeesToutTemps(membreId)
- MembreDashboardService: envoi totalCotisationsPayeesToutTemps dans la synthèse
Made-with: Cursor
2026-03-09 19:58:25 +00:00
dahoud
4a0c5f9d33
Configure Maven repository for unionflow-server-api dependency
2025-12-10 01:08:17 +00:00