El admin global ahora puede crear usuarios directamente desde /admin/usuarios sin depender de que un owner los invite. Backend: - Nuevo endpoint POST /usuarios/global (controller + service) - Valida límite de usuarios del plan del tenant destino - Si el email ya existe, agrega membership al tenant destino - Si no existe, crea user con temp password + membership - Schema Zod: email, nombre, role, tenantId, supervisorUserId? Frontend: - Botón 'Agregar Usuario' en /admin/usuarios - Formulario con: nombre, email, rol, empresa - Hook useCreateUsuarioGlobal con invalidación de queries
42 lines
1.5 KiB
TypeScript
42 lines
1.5 KiB
TypeScript
import { apiClient } from './client';
|
|
import type { UserListItem, UserInvite, UserUpdate } from '@horux/shared';
|
|
|
|
export async function getUsuarios(): Promise<UserListItem[]> {
|
|
const response = await apiClient.get<UserListItem[]>('/usuarios');
|
|
return response.data;
|
|
}
|
|
|
|
export async function inviteUsuario(data: UserInvite): Promise<UserListItem> {
|
|
const response = await apiClient.post<UserListItem>('/usuarios/invite', data);
|
|
return response.data;
|
|
}
|
|
|
|
export async function updateUsuario(id: string, data: UserUpdate): Promise<UserListItem> {
|
|
const response = await apiClient.patch<UserListItem>(`/usuarios/${id}`, data);
|
|
return response.data;
|
|
}
|
|
|
|
export async function deleteUsuario(id: string): Promise<void> {
|
|
await apiClient.delete(`/usuarios/${id}`);
|
|
}
|
|
|
|
// Funciones globales (admin global)
|
|
export async function getAllUsuarios(): Promise<UserListItem[]> {
|
|
const response = await apiClient.get<UserListItem[]>('/usuarios/global/all');
|
|
return response.data;
|
|
}
|
|
|
|
export async function createUsuarioGlobal(data: UserInvite & { tenantId: string }): Promise<UserListItem> {
|
|
const response = await apiClient.post<UserListItem>('/usuarios/global', data);
|
|
return response.data;
|
|
}
|
|
|
|
export async function updateUsuarioGlobal(id: string, data: UserUpdate): Promise<UserListItem> {
|
|
const response = await apiClient.patch<UserListItem>(`/usuarios/global/${id}`, data);
|
|
return response.data;
|
|
}
|
|
|
|
export async function deleteUsuarioGlobal(id: string): Promise<void> {
|
|
await apiClient.delete(`/usuarios/global/${id}`);
|
|
}
|