From 86e7e28020cac2f22a999c2153f49ab8c033a084 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 6 Sep 2026 09:22:25 +0000 Subject: [PATCH] =?UTF-8?q?Demandes=20d'adh=C3=A9sion=20:=20actions=20selo?= =?UTF-8?q?n=20le=20statut,=20double=20approbation=20impossible?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Une demande approuvée gardait ses boutons « Approuver & créer » et « Rejeter », alors que l'adhérent et son compte existaient déjà. La ligne n'affiche plus que le lien vers la fiche créée (retrouvée par l'e-mail) ; une demande nouvelle garde ses deux actions, une demande rejetée peut encore être approuvée. Côté serveur, approveMembershipRequest refuse une demande déjà approuvée et setRequestStatus ne réécrit plus le statut d'une demande approuvée : un double clic ou un onglet resté ouvert ne peut plus créer un second compte. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01HDbKbJrPWweXXYSxA8MXW7 --- src/app/backend/actions.ts | 6 ++++ src/app/backend/demandes/page.tsx | 53 +++++++++++++++++++++++++------ 2 files changed, 50 insertions(+), 9 deletions(-) diff --git a/src/app/backend/actions.ts b/src/app/backend/actions.ts index 5144cad..2892b07 100644 --- a/src/app/backend/actions.ts +++ b/src/app/backend/actions.ts @@ -1163,6 +1163,9 @@ export async function approveMembershipRequest(formData: FormData): Promise r.status === "approved" && r.email) + .map((r) => (r.email ?? "").trim().toLowerCase()) + .filter(Boolean); + const memberByEmail = new Map(); + if (approvedEmails.length > 0) { + const rows = await db + .select({ id: members.id, email: members.email }) + .from(members) + .where(inArray(members.email, approvedEmails)); + for (const row of rows) memberByEmail.set(row.email.trim().toLowerCase(), row.id); + } + return (
{/* ---- Demandes d'adhésion ---- */} @@ -72,13 +88,32 @@ export default async function DemandesPage() {
-
- -
- - - Rejeter -
+ {/* Les actions dépendent du statut : une demande approuvée a déjà + produit son adhérent, on ne propose plus que d'ouvrir sa fiche. */} +
+ {r.status === "approved" ? ( + (() => { + const memberId = memberByEmail.get((r.email ?? "").trim().toLowerCase()); + return memberId ? ( + + Ouvrir la fiche adhérent → + + ) : ( + Adhérent créé + ); + })() + ) : ( + <> + + {r.status === "new" && ( +
+ + + Rejeter +
+ )} + + )}
{r.message && (