feat(sprint-11 web 2026-04-25): pages PrimeFaces Sprint 10 (UBO, audit-trail viewer, délégations rôles) + bump api 1.0.6→1.0.8
DRY strict appliqué : web réutilise directement les DTOs officiels de unionflow-server-api 1.0.8 (CreateBeneficiaireEffectifRequest, BeneficiaireEffectifResponse, AuditTrailOperationResponse, CreateRoleDelegationRequest, RoleDelegationResponse) au lieu de DTOs miroirs locaux. Aucune duplication. Bump dépendance api 1.0.6 → 1.0.8 REST clients @RegisterRestClient configKey=unionflow-api - BeneficiaireEffectifRestClient : CRUD lister/trouverParId/creer/mettreAJour/desactiver - AuditTrailRestClient : 5 endpoints lecture (parUtilisateur, historique, parOrganisation, sodViolations, financial) - RoleDelegationRestClient : listerParOrganisation / creer / revoquer Beans @ViewScoped - BeneficiaireEffectifBean : recherche (KYC|org|PEP), création formulaire, marquerPep, désactiver - AuditTrailViewerBean : 5 modes (USER/ENTITY/ORG/SOD_VIOLATIONS/FINANCIAL), couleurAction (DELETE→danger, VALIDATE→success, etc.), couleurSod - RoleDelegationBean : recherche/créer/révoquer, couleurStatut (ACTIVE/REVOQUEE/EXPIREE) Pages XHTML - /pages/secure/conformite/beneficiaires-effectifs.xhtml — recherche + tableau + nouvelle UBO (panel toggleable) - /pages/secure/conformite/audit-trail.xhtml — filtres mode + tableau + détail JSONB (pre format) - /pages/secure/admin/role-delegations.xhtml — table actives + nouvelle (datePicker dates) MenuBean + menu.xhtml - 3 nouveaux flags : isBeneficiairesEffectifsVisible, isAuditTrailViewerVisible, isRoleDelegationsVisible - 3 menuitems ajoutés au sous-menu Conformité existant (icônes pi-users, pi-history, pi-share-alt) - Gating par rôles : COMPLIANCE_OFFICER + CONTROLEUR_INTERNE pour audit ; ADMIN_ORGANISATION + PRESIDENT pour délégations Tests (10/10 verts, 31/31 cumulé S8+S11) - AuditTrailViewerBeanTest : 8 tests (couleurAction × 6 cas, couleurSod, defaults) - RoleDelegationBeanTest : 2 tests (couleurStatut × 5, defaults)
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
package dev.lions.unionflow.client.service;
|
||||
|
||||
import dev.lions.unionflow.client.security.AuthHeaderFactory;
|
||||
import dev.lions.unionflow.server.api.dto.audit.response.AuditTrailOperationResponse;
|
||||
import jakarta.ws.rs.Consumes;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.PathParam;
|
||||
import jakarta.ws.rs.Produces;
|
||||
import jakarta.ws.rs.QueryParam;
|
||||
import jakarta.ws.rs.core.MediaType;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders;
|
||||
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
|
||||
|
||||
/**
|
||||
* Client REST de lecture audit trail (Sprint 11 ⇄ backend Sprint 10 CQRS read).
|
||||
*/
|
||||
@RegisterRestClient(configKey = "unionflow-api")
|
||||
@RegisterClientHeaders(AuthHeaderFactory.class)
|
||||
@Path("/api/audit-trail")
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public interface AuditTrailRestClient {
|
||||
|
||||
@GET
|
||||
@Path("/by-user/{userId}")
|
||||
List<AuditTrailOperationResponse> parUtilisateur(
|
||||
@PathParam("userId") UUID userId,
|
||||
@QueryParam("from") String from,
|
||||
@QueryParam("to") String to);
|
||||
|
||||
@GET
|
||||
@Path("/by-entity/{type}/{id}")
|
||||
List<AuditTrailOperationResponse> historique(
|
||||
@PathParam("type") String entityType, @PathParam("id") UUID entityId);
|
||||
|
||||
@GET
|
||||
@Path("/by-organisation/{orgId}")
|
||||
List<AuditTrailOperationResponse> parOrganisation(@PathParam("orgId") UUID orgId);
|
||||
|
||||
@GET
|
||||
@Path("/sod-violations")
|
||||
List<AuditTrailOperationResponse> violationsSod();
|
||||
|
||||
@GET
|
||||
@Path("/financial/{orgId}")
|
||||
List<AuditTrailOperationResponse> operationsFinancieres(
|
||||
@PathParam("orgId") UUID orgId,
|
||||
@QueryParam("from") String from,
|
||||
@QueryParam("to") String to);
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package dev.lions.unionflow.client.service;
|
||||
|
||||
import dev.lions.unionflow.client.security.AuthHeaderFactory;
|
||||
import dev.lions.unionflow.server.api.dto.kyc.request.CreateBeneficiaireEffectifRequest;
|
||||
import dev.lions.unionflow.server.api.dto.kyc.request.UpdateBeneficiaireEffectifRequest;
|
||||
import dev.lions.unionflow.server.api.dto.kyc.response.BeneficiaireEffectifResponse;
|
||||
import jakarta.ws.rs.Consumes;
|
||||
import jakarta.ws.rs.DELETE;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.POST;
|
||||
import jakarta.ws.rs.PUT;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.PathParam;
|
||||
import jakarta.ws.rs.Produces;
|
||||
import jakarta.ws.rs.QueryParam;
|
||||
import jakarta.ws.rs.core.MediaType;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders;
|
||||
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
|
||||
|
||||
/**
|
||||
* Client REST des Bénéficiaires Effectifs (Sprint 11 ⇄ backend Sprint 10).
|
||||
* Réutilise les DTOs officiels de unionflow-server-api 1.0.8 — zéro duplication.
|
||||
*/
|
||||
@RegisterRestClient(configKey = "unionflow-api")
|
||||
@RegisterClientHeaders(AuthHeaderFactory.class)
|
||||
@Path("/api/kyc/beneficiaires-effectifs")
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public interface BeneficiaireEffectifRestClient {
|
||||
|
||||
@GET
|
||||
List<BeneficiaireEffectifResponse> lister(
|
||||
@QueryParam("kycDossierId") UUID kycDossierId,
|
||||
@QueryParam("organisationCibleId") UUID organisationCibleId,
|
||||
@QueryParam("pep") Boolean pep);
|
||||
|
||||
@GET
|
||||
@Path("/{id}")
|
||||
BeneficiaireEffectifResponse trouverParId(@PathParam("id") UUID id);
|
||||
|
||||
@POST
|
||||
BeneficiaireEffectifResponse creer(CreateBeneficiaireEffectifRequest request);
|
||||
|
||||
@PUT
|
||||
@Path("/{id}")
|
||||
BeneficiaireEffectifResponse mettreAJour(
|
||||
@PathParam("id") UUID id, UpdateBeneficiaireEffectifRequest request);
|
||||
|
||||
@DELETE
|
||||
@Path("/{id}")
|
||||
void desactiver(@PathParam("id") UUID id);
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package dev.lions.unionflow.client.service;
|
||||
|
||||
import dev.lions.unionflow.client.security.AuthHeaderFactory;
|
||||
import dev.lions.unionflow.server.api.dto.delegation.request.CreateRoleDelegationRequest;
|
||||
import dev.lions.unionflow.server.api.dto.delegation.response.RoleDelegationResponse;
|
||||
import jakarta.ws.rs.Consumes;
|
||||
import jakarta.ws.rs.DELETE;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.POST;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.PathParam;
|
||||
import jakarta.ws.rs.Produces;
|
||||
import jakarta.ws.rs.QueryParam;
|
||||
import jakarta.ws.rs.core.MediaType;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders;
|
||||
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
|
||||
|
||||
/**
|
||||
* Client REST des délégations de rôle (Sprint 11 ⇄ backend Sprint 10).
|
||||
*/
|
||||
@RegisterRestClient(configKey = "unionflow-api")
|
||||
@RegisterClientHeaders(AuthHeaderFactory.class)
|
||||
@Path("/api/role-delegations")
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public interface RoleDelegationRestClient {
|
||||
|
||||
@GET
|
||||
@Path("/organisation/{orgId}")
|
||||
List<RoleDelegationResponse> listerParOrganisation(@PathParam("orgId") UUID orgId);
|
||||
|
||||
@POST
|
||||
RoleDelegationResponse creer(
|
||||
CreateRoleDelegationRequest request,
|
||||
@QueryParam("rolesDelegataire") String rolesDelegataireCsv);
|
||||
|
||||
@DELETE
|
||||
@Path("/{id}")
|
||||
RoleDelegationResponse revoquer(@PathParam("id") UUID id);
|
||||
}
|
||||
Reference in New Issue
Block a user