Commit Graph

23 Commits

Author SHA1 Message Date
dahoud
5e21ef9573 fix: V10 migration — corriger type colonne version dans modules_disponibles
La colonne version était VARCHAR(20) au lieu de BIGINT, causant une erreur
Hibernate validate au démarrage. L'entité ModuleDisponible n'a pas de champ
version propre — la colonne était orpheline et conflicte avec BaseEntity @Version.

Fix idempotent : suppression VARCHAR + ajout BIGINT DEFAULT 0 (table vide).
2026-04-10 15:48:32 +00:00
dahoud
c79a393d6e revert: hibernate back to validate mode (schema stabilized) 2026-04-08 21:42:03 +00:00
dahoud
b4d9936b6b temp: hibernate update mode for fresh DB migration (revert to validate after startup) 2026-04-08 19:17:47 +00:00
dahoud
971b7d2178 fix: permissions table schema in V1 (add ressource, action, libelle; remove nom) 2026-04-08 19:16:24 +00:00
dahoud
13da0d07bd fix: apply plural table renames to V17-V23 migrations 2026-04-08 19:00:09 +00:00
dahoud
139642c4cd fix: apply plural table name renames to all migrations V2-V16
Same rename applied to V1 must propagate to V2-V16 which referenced
old singular table names (compte_comptable, suggestion, etc.)
2026-04-08 17:32:48 +00:00
dahoud
e6627ab45d fix: rename all V1 table names to match entity @Table names (plural)
Hibernate validate mode in prod requires exact table names.
V1 used singular names (permission, document, suggestion, etc.)
but entities use plural names (permissions, documents, suggestions, etc.).
Hibernate update mode was masking this by auto-creating plural tables.

Renamed 23 tables to match entities.
2026-04-08 17:23:29 +00:00
dahoud
3c1e5c6a2d fix: SystemAlert @PrePersist override + types_reference complete schema in V1
- SystemAlert.onCreate() now calls super.onCreate() to set dateCreation (was null → NOT NULL violation every minute)
- V1: types_reference updated with full schema (domaine, est_defaut, est_systeme, ordre_affichage, modules_requis, organisation_id)
- V9: idempotent guard for categorie nullable ALTER (already nullable in updated V1)
2026-04-08 17:01:58 +00:00
dahoud
a2dfae9a0b fix(security): audit RBAC complet v3.0 — rôles normalisés, lifecycle, changement mdp mobile
RBAC:
- HealthResource: @PermitAll
- RoleResource: @RolesAllowed ADMIN/SUPER_ADMIN/ADMIN_ORGANISATION class-level
- PropositionAideResource: @RolesAllowed MEMBRE/USER class-level
- AuthCallbackResource: @PermitAll
- EvenementResource: @PermitAll /publics et /test, count restreint
- BackupResource/LogsMonitoringResource/SystemResource: MODERATOR → MODERATEUR
- AnalyticsResource: MANAGER/MEMBER → ADMIN_ORGANISATION/MEMBRE
- RoleConstant.java: constantes de rôles centralisées

Cycle de vie membres:
- MemberLifecycleService: ajouterMembre()/retirerMembre() sur activation/radiation/archivage
- MembreResource: endpoint GET /numero/{numeroMembre}
- MembreService: méthode trouverParNumeroMembre()

Changement mot de passe:
- CompteAdherentResource: endpoint POST /auth/change-password (mobile)
- MembreKeycloakSyncService: changerMotDePasseDirectKeycloak() via API Admin Keycloak directe
- Fallback automatique si lions-user-manager indisponible

Workflow:
- Flyway V17-V23: rôles, types org, formules Option C, lifecycle columns, bareme cotisation
- Nouvelles classes: MemberLifecycleService, OrganisationModuleService, scheduler
- Security: OrganisationContextFilter, OrganisationContextHolder, ModuleAccessFilter
2026-04-07 20:52:26 +00:00
dahoud
aef5548e87 feat(v3.0): implémentation Phases 0-8 — RBAC, lifecycle, multi-org, plans, dashboards
Phase 0 : @RolesAllowed SUPER_ADMIN sur POST/DELETE organisations ; AuthenticationFilter pages super-admin
Phase 2 : OrganisationModuleService, @RequiresModule, ModuleAccessFilter, RoleService, PermissionChecker
Phase 3 : multi-org context switching (OrganisationContextFilter, headers X-Active-Organisation-Id / X-Active-Role)
Phase 4 : feature-gating navigation par typeOrganisation (web MenuBean + mobile MorePage)
Phase 5 : MemberLifecycleService — 8 transitions (activer/suspendre/radier/archiver/inviter/accepter/expirer/rappels)
Phase 6 : FormuleAbonnement Option C (planCommercial, apiAccess, federationAccess, quotas) + SouscriptionOrganisation méthodes quota
Phase 7 : DashboardResource SUPER_ADMIN ajouté ; DashboardBean.checkAccessAndRedirect() ; dashboards distincts par rôle
Phase 8 : MembreResourceLifecycleRbacTest, SouscriptionQuotaOptionCTest, OrganisationContextHolderTest, OrganisationContextFilterMultiOrgTest, MemberLifecycleServiceTest
2026-04-06 16:49:47 +00:00
dahoud
f22b3472a8 fix(flyway): V4 RENAME COLUMN conditionnel + V6 CREATE TABLE IF NOT EXISTS
V4: system_logs colonnes niveau/stacktrace déjà renommées en prod
→ RENAME COLUMN enveloppé dans DO blocks IF EXISTS

V6: conversations/messages/conversation_participants existent déjà en prod
→ CREATE TABLE + CREATE INDEX → IF NOT EXISTS
2026-04-05 11:24:15 +00:00
dahoud
6bcec363ce fix(flyway): V2 conditional ALTER TABLE pour tables absentes en prod
formule_abonnement et souscription_organisation n'existent pas dans la DB
prod (nommées formules_abonnement/souscriptions_organisation dans l'ancien
schema). Remplacé par des DO blocks conditionnels (IF EXISTS).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 16:56:14 +00:00
dahoud
437f3c819e fix(prod): ignore missing Flyway migrations + disable file logging
- quarkus.flyway.ignore-migration-patterns=*:missing — migrations V1.2/V1.3
  appliquées en DB mais absentes localement (après consolidation V1-V10)
- quarkus.log.file.enable=false — /var/log/unionflow/ absent dans le container

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 16:38:25 +00:00
dahoud
e00a9301d8 feat: BackupService real pg_dump, OrganisationService region stats, SystemConfigService overrides
- BackupService: DB-persisted metadata (BackupRecord/BackupConfig entities + V16 Flyway migration),
  real pg_dump execution via ProcessBuilder, soft-delete on deleteBackup, pg_restore manual guidance
- OrganisationService: repartitionRegion now queries Adresse entities (was Map.of() stub)
- SystemConfigService: in-memory config overrides via AtomicReference (no DB dependency)
- SystemMetricsService: null-guard on MemoryMXBean in getSystemStatus() (fixes test NPE)
- Souscription workflow: SouscriptionService, SouscriptionResource, FormuleAbonnementRepository,
  V11 Flyway migration, admin REST clients
- Flyway V8-V15: notes membres, types référence, type orga constraint, seed roles,
  première connexion, Wave checkout URL, Wave telephone column length fix
- .gitignore: added uploads/ and .claude/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 16:14:30 +00:00
dahoud
a740c172ef Refactoring - Version stable 2026-03-28 14:21:30 +00:00
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
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
8a3dd8632b test(dashboard): amélioration des tests dashboard avec données réelles
Remplace les tests "placeholders" qui acceptaient anyOf(200, 500)
par des tests robustes avec assertions sur le contenu JSON.

Modifications:
- DashboardResourceTest: 6 → 8 tests avec setup de données réelles
  * Ajout BeforeEach avec création Organisation + Membre de test
  * Validation du contenu JSON (organizationId, stats, activities, events)
  * Tests cas d'erreur (params manquants, UUIDs invalides)

- MembreDashboardResourceTest: 2 → 5 tests
  * Tests ajustés pour fonctionner sans données seed
  * Ajout test authentification (401)
  * Tests 404 pour membre inexistant

- MembreDashboardServiceTest: ajusté pour absence de données seed
  * Tests 404/NotFoundException au lieu d'attendre des données seed

- application-test.properties: fix wave.api.key/secret vides
  * Valeurs factices pour éviter erreur config en tests

Résultat: 17 tests dashboard, 100% de réussite (0 erreurs, 0 échecs)

Tâche: #57 - Remplacer tests placeholders dashboard

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-03-16 06:07:20 +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
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
6aceceff81 Fix: Add table existence check in V1.2 migration
V1.2 now checks if the 'membres' table exists before trying to add
the organisation_id column. This prevents failures when Flyway runs
before Hibernate creates the initial schema from JPA entities.

Changes:
- Added table existence check before ALTER TABLE membres
- Migration will skip the ALTER if table doesn't exist yet
- Allows Hibernate to create initial schema first

This ensures migrations work correctly without any test data.
2025-12-12 18:00:44 +00:00
dahoud
4a0c5f9d33 Configure Maven repository for unionflow-server-api dependency 2025-12-10 01:08:17 +00:00