# Lions User Manager

> Gestion centralisée des utilisateurs via Keycloak Admin API — Backend REST + Frontend JSF PrimeFaces Freya

## Architecture

```
lions-user-manager/
├── pom.xml                                          # POM parent (multi-modules)
├── lions-user-manager-server-api/                   # Contrats API : DTOs, interfaces, enums
├── lions-user-manager-server-impl-quarkus/          # Serveur REST Quarkus + Keycloak Admin
├── lions-user-manager-client-quarkus-primefaces-freya/ # Client Web JSF + PrimeFaces Freya
└── scripts/                                         # Scripts DevOps (Keycloak, DB, Git)
```

## Stack Technique

| Composant | Technologie | Version |
|-----------|------------|---------|
| Runtime | Java | 17 |
| Framework | Quarkus | 3.15.1 |
| UI Framework | PrimeFaces (Freya theme) | 14.0.5 |
| Auth | Keycloak (OIDC + Admin API) | 26.0.4 |
| Base de données | PostgreSQL + Hibernate ORM Panache | — |
| Migration DB | Flyway | — |
| Build | Maven | — |
| Tests | JUnit 5, Mockito 5, Testcontainers, REST-Assured | — |

## Modules

### `server-api`
Contrats partagés entre serveur et client :
- **DTOs** : `UserDTO`, `RoleDTO`, `AuditLogDTO`, `RealmAssignmentDTO`, etc.
- **Interfaces Service** : `UserService`, `RoleService`, `AuditService`, `SyncService`, `RealmAuthorizationService`
- **Enums** : `StatutUser`, `TypeRole`, `TypeActionAudit`
- **Validations** : `ValidationConstants`

### `server-impl-quarkus`
API REST backend :
- **Resources** : `UserResource`, `RoleResource`, `AuditResource`, `RealmAssignmentResource`, `SyncResource`, `RealmResource`
- **Services** : Implémentations complètes avec gestion d'erreurs et audit
- **Keycloak Admin Client** : Gestion des utilisateurs, rôles, realms via Keycloak Admin API
- **Health & Metrics** : `/health`, `/metrics` (Prometheus), `/q/swagger-ui`
- **Audit** : Traçabilité des actions sur table PostgreSQL

### `client-quarkus-primefaces-freya`
Interface web admin :
- **Pages** : Dashboard, Gestion Utilisateurs (CRUD), Rôles, Audit, Synchronisation, Realm Assignment
- **Beans JSF** : `DashboardBean`, `UserListBean`, `UserCreationBean`, `UserProfilBean`, `RoleGestionBean`, `AuditConsultationBean`, etc.
- **REST Clients** : Communication type-safe avec le serveur via MicroProfile REST Client
- **Thème** : PrimeFaces Freya (enterprise dark/light)

## Prérequis

- **Java 17+**
- **Maven 3.9+**
- **Docker Desktop** (pour Keycloak et PostgreSQL)
- **Keycloak** accessible sur `localhost:8180`
- **PostgreSQL** accessible sur `localhost:5432`

## Démarrage Rapide

### 1. Démarrer l'infrastructure

```bash
# Keycloak
docker run -d --name keycloak -p 8180:8080 \
  -e KC_BOOTSTRAP_ADMIN_USERNAME=admin \
  -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin \
  quay.io/keycloak/keycloak:26.0.4 start-dev

# PostgreSQL
docker run -d --name postgres -p 5432:5432 \
  -e POSTGRES_USER=skyfile \
  -e POSTGRES_PASSWORD=skyfile \
  -e POSTGRES_DB=lions_user_manager_dev \
  postgres:16
```

### 2. Configurer Keycloak

```bash
# Utiliser les scripts dans scripts/
pwsh scripts/setup-keycloak-client.ps1
```

### 3. Compiler le projet

```bash
mvn clean install -DskipTests
```

### 4. Lancer le serveur (port 8081)

```bash
cd lions-user-manager-server-impl-quarkus
mvn quarkus:dev -Dquarkus.profile=dev
```

### 5. Lancer le client (port 8082)

```bash
cd lions-user-manager-client-quarkus-primefaces-freya
mvn quarkus:dev -Dquarkus.profile=dev
```

## Ports

| Service | Port | URL |
|---------|------|-----|
| Keycloak | 8180 | http://localhost:8180 |
| Serveur API | 8081 | http://localhost:8081 |
| Client Web | 8082 | http://localhost:8082 |
| Swagger UI | 8081 | http://localhost:8081/q/swagger-ui |
| PostgreSQL | 5432 | — |

## Configuration

Chaque module utilise 3 fichiers de configuration Quarkus :

| Fichier | Rôle |
|---------|------|
| `application.properties` | Propriétés communes (tous environnements) |
| `application-dev.properties` | Surcharges développement (ports, logging verbeux, Keycloak local) |
| `application-prod.properties` | Surcharges production (env vars, TLS, logging minimal) |

## Tests

```bash
# Tests unitaires seuls
mvn test

# Tests d'intégration
mvn verify

# Avec couverture JaCoCo
mvn verify -Pjacoco
```

## Production

### Variables d'environnement requises

```bash
# Keycloak
KEYCLOAK_AUTH_SERVER_URL=https://security.lions.dev/realms/lions-user-manager
KEYCLOAK_SERVER_URL=https://security.lions.dev
KEYCLOAK_ADMIN_USERNAME=admin
KEYCLOAK_ADMIN_PASSWORD=<secret>
KEYCLOAK_CLIENT_ID=lions-user-manager-client

# Base de données
DB_HOST=<host>
DB_PORT=5432
DB_NAME=lions_user_manager
DB_USERNAME=<user>
DB_PASSWORD=<secret>

# Sécurité
OIDC_ENCRYPTION_SECRET=<32-char-secret>
CORS_ORIGINS=https://users.lions.dev

# Backend URL (pour le client)
LIONS_USER_MANAGER_BACKEND_URL=https://api.users.lions.dev
```

### Docker

Chaque module déployable contient un `Dockerfile.prod` :

```bash
# Build natif
mvn package -Pnative -DskipTests

# Build Docker
docker build -f Dockerfile.prod -t lions-user-manager-server:1.0.0 .
```

## Licence

Propriétaire — Lions Dev Team © 2025
