Backend: - client-invitations.service.ts: funcion resendInvitation() que genera nuevo token, actualiza expiresAt y reenvia el email. - Controller + routes: POST /invitations/client/:id/resend Frontend: - API client + hook useResendInvitation con invalidacion de cache. - Pagina /admin/invitar-cliente: boton 'Reenviar' por cada invitacion pendiente en la tabla. Refs: docs/CAMBIOS-2026-05-09.md
64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
import { apiClient } from './client';
|
|
|
|
export interface ClientInvitation {
|
|
id: string;
|
|
email: string;
|
|
invitedBy: string;
|
|
nombreDespacho: string | null;
|
|
rfc: string | null;
|
|
status: string;
|
|
token: string;
|
|
sentAt: string;
|
|
expiresAt: string;
|
|
acceptedAt: string | null;
|
|
createdAt: string;
|
|
}
|
|
|
|
export async function createInvitation(data: {
|
|
email: string;
|
|
nombreDespacho?: string;
|
|
rfc?: string;
|
|
}): Promise<{ message: string; invitation: ClientInvitation }> {
|
|
const res = await apiClient.post('/invitations/client', data);
|
|
return res.data;
|
|
}
|
|
|
|
export async function validateInvitationToken(token: string): Promise<{
|
|
email: string;
|
|
nombreDespacho: string | null;
|
|
rfc: string | null;
|
|
expiresAt: string;
|
|
}> {
|
|
const res = await apiClient.get(`/invitations/client/validate/${token}`);
|
|
return res.data;
|
|
}
|
|
|
|
export async function registerFromInvitation(
|
|
token: string,
|
|
data: {
|
|
nombre: string;
|
|
password: string;
|
|
nombreDespacho: string;
|
|
rfc: string;
|
|
verticalProfile: 'CONTABLE' | 'JURIDICO' | 'ARQUITECTURA';
|
|
codigoPostal?: string;
|
|
}
|
|
): Promise<{
|
|
accessToken: string;
|
|
refreshToken: string;
|
|
user: any;
|
|
}> {
|
|
const res = await apiClient.post(`/invitations/client/register/${token}`, data);
|
|
return res.data;
|
|
}
|
|
|
|
export async function resendInvitation(id: string): Promise<{ message: string }> {
|
|
const res = await apiClient.post(`/invitations/client/${id}/resend`);
|
|
return res.data;
|
|
}
|
|
|
|
export async function getClientInvitations(): Promise<ClientInvitation[]> {
|
|
const res = await apiClient.get('/invitations/client');
|
|
return res.data;
|
|
}
|