Membres
Procédures tRPC du routeur member : inviter un membre, accepter une invitation, changer un rôle d’accès, archiver et restaurer.
Procédures du routeur member. Créer une ligne membre et modifier son nom, sa photo ou ses données de travail passe par GraphQL sur l’entité member ; ces procédures gèrent le parcours d’invitation, le rôle d’accès et le nombre de sièges de l’abonnement, qui demandent tous une logique côté serveur.
Un rôle d’accès vaut Readonly, Member, Admin ou Owner ; voir Permissions pour ce que chacun accorde.
Mutation member.inviteMember
Envoie un email d’invitation à un membre existant, pour un Admin ou un Owner. Un nouvel appel sur un membre déjà invité renvoie l’email avec un token frais.
| Input | Type | Description |
|---|---|---|
memberId | uuid | Membre à inviter, pas encore rattaché à un utilisateur. Requis. |
email | String | Adresse à laquelle l’invitation est envoyée. Requis. |
role | String | Rôle d’accès accordé à l’acceptation. Requis. |
La ligne membre conserve l’email et la date d’invitation, dont le token d’invitation est dérivé. Un membre déjà rattaché à un utilisateur répond CONFLICT, et l’appel est refusé quand l’abonnement n’a plus de siège disponible pour un membre de plus. La procédure ne renvoie rien.
await trpc.member.inviteMember.mutate({ memberId: 'VOTRE_MEMBER_ID', role: 'Member',})Requête member.getMemberInvitationInfo
Lit ce qu’un lien d’invitation doit afficher avant que le destinataire se connecte : cette procédure ne demande donc aucune authentification.
| Input | Type | Description |
|---|---|---|
memberId | uuid | Membre invité. Requis. |
token | String | Token porté par le lien d’invitation. Requis. |
Elle renvoie { orgName, email }. Un membre sans invitation en attente répond NOT_FOUND, et un token qui ne correspond pas répond UNAUTHORIZED.
Requête member.getPendingInvitations
Liste les invitations en attente pour l’utilisateur connecté, rapprochées de son adresse email. Elle ne prend aucun input et sert à proposer de rejoindre une organisation à un utilisateur qui n’en a aucune.
Elle renvoie un tableau de { memberId, token, orgId, orgName }, prêt à passer à member.acceptMemberInvitation. Une adresse email non vérifiée renvoie un tableau vide, l’inscription seule ne prouvant rien sur le propriétaire de l’adresse.
Mutation member.acceptMemberInvitation
Rattache le membre invité à l’utilisateur connecté et applique le rôle d’accès prévu.
| Input | Type | Description |
|---|---|---|
memberId | uuid | Membre invité. Requis. |
token | String | Token porté par le lien d’invitation. Requis. |
L’invitation est consommée, et le nombre de sièges de l’abonnement Stripe est mis à jour quand l’organisation a un abonnement actif. Quand il s’agit de la première organisation de l’utilisateur, invitation est enregistré comme source d’onboarding. Un utilisateur déjà membre de l’organisation répond CONFLICT, et un abonnement sans siège libre bloque l’appel. La procédure ne renvoie rien.
Mutation member.updateMemberRole
Change ou retire le rôle d’accès d’un membre. Un Admin agit sur n’importe quel membre, changer le rôle d’un Owner demande le rôle Owner, et le dernier Owner actif ne peut pas être rétrogradé.
| Input | Type | Description |
|---|---|---|
memberId | uuid | Membre visé. Requis. |
role | String | Nouveau rôle d’accès, ou valeur vide pour révoquer l’accès en gardant le membre dans l’organigramme. Requis. |
Un membre jamais invité répond NOT_FOUND. La procédure ne renvoie rien.
Mutation member.archiveMember
Archive un membre, le détache de son compte utilisateur et efface son rôle d’accès et son invitation. Un Admin archive n’importe quel membre, archiver un Owner demande le rôle Owner, et le dernier Owner actif est protégé. Un membre ne peut pas s’archiver lui-même, ce qui répond FORBIDDEN.
La procédure prend { memberId }, met à jour le nombre de sièges de l’abonnement quand le membre était rattaché à un utilisateur, et ne renvoie rien.
Mutation member.restoreMember
Restaure un membre archivé, pour un Admin ou un Owner. La procédure prend { memberId } et ne renvoie rien. Le membre revient sans rôle d’accès : invitez-le de nouveau pour lui redonner l’accès.