feat: WebSocket temps réel + Finance Workflow + corrections

- Task #6: WebSocket /ws/dashboard + Kafka events (5 topics)
  * Backend: KafkaEventProducer, KafkaEventConsumer
  * Mobile: WebSocketService (reconnection, heartbeat, typed events)
  * DashboardBloc: Auto-refresh depuis WebSocket events

- Finance Workflow: approbations + budgets (backend + mobile)
  * Backend: entities, services, resources, migrations Flyway V6
  * Mobile: features finance_workflow complète avec BLoC

- Corrections DI: interfaces IRepository partout
  * IProfileRepository, IOrganizationRepository, IMembreRepository
  * GetIt configuré avec @injectable

- Spec-Kit: constitution + templates mis à jour
  * .specify/memory/constitution.md enrichie
  * Templates agent, plan, spec, tasks, checklist

- Nettoyage: fichiers temporaires supprimés

Signed-off-by: lions dev Team
This commit is contained in:
dahoud
2026-03-15 02:12:17 +00:00
parent bbc409de9d
commit e8ad874015
635 changed files with 58160 additions and 20674 deletions

View File

@@ -0,0 +1,62 @@
# Script pour lister les rôles des utilisateurs Keycloak
# Usage: .\list-user-roles.ps1 [username]
# Exemple: .\list-user-roles.ps1 admin.meska@unionflow.test
param(
[string]$Username = ""
)
Write-Host "=== Rôles des Utilisateurs (Realm: unionflow) ===" -ForegroundColor Cyan
Write-Host ""
# Obtenir le token admin
$tokenResponse = Invoke-RestMethod -Method Post `
-Uri 'http://localhost:8180/realms/master/protocol/openid-connect/token' `
-ContentType 'application/x-www-form-urlencoded' `
-Body 'username=admin&password=admin&grant_type=password&client_id=admin-cli'
$token = $tokenResponse.access_token
# Récupérer les utilisateurs
$users = Invoke-RestMethod -Method Get `
-Uri 'http://localhost:8180/admin/realms/unionflow/users' `
-Headers @{ Authorization = "Bearer $token" }
# Filtrer si un username est spécifié
if ($Username) {
$users = $users | Where-Object { $_.username -eq $Username }
if (-not $users) {
Write-Host "[ERREUR] Utilisateur '$Username' non trouvé" -ForegroundColor Red
exit 1
}
}
# Parcourir les utilisateurs
foreach ($user in $users) {
Write-Host "[$($user.username)]" -ForegroundColor Yellow
Write-Host " Email: $($user.email)"
Write-Host " Enabled: $($user.enabled)"
# Realm roles
$realmRoles = Invoke-RestMethod -Method Get `
-Uri "http://localhost:8180/admin/realms/unionflow/users/$($user.id)/role-mappings/realm" `
-Headers @{ Authorization = "Bearer $token" }
if ($realmRoles) {
Write-Host " Rôles:"
$realmRoles | Where-Object { $_.name -ne 'default-roles-unionflow' -and $_.name -ne 'offline_access' -and $_.name -ne 'uma_authorization' } | ForEach-Object {
Write-Host " - $($_.name)" -ForegroundColor Green
}
}
Write-Host ""
}
Write-Host "=== Rôles Disponibles ===" -ForegroundColor Cyan
$allRoles = Invoke-RestMethod -Method Get `
-Uri "http://localhost:8180/admin/realms/unionflow/roles" `
-Headers @{ Authorization = "Bearer $token" }
$allRoles | Where-Object { $_.name -notlike 'default-*' -and $_.name -ne 'offline_access' -and $_.name -ne 'uma_authorization' } | ForEach-Object {
Write-Host " - $($_.name)"
}