fix(crm): catálogo de permisos no cargaba por redirect 307 (slash final)

permissionsAPI.list pegaba a /v1/core/permissions/ (con slash); la ruta backend
es @router.get("") sin slash, así que FastAPI devolvía 307 y el cliente no lo
seguía → "No se pudieron cargar roles/permisos". Se quitan los slash finales de
list/getById/create/update/delete/getModules/getActions para que matcheen exacto.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ernesto Herrera
2026-07-17 16:51:18 -06:00
parent de9e35c501
commit 0d8c4ddf62

View File

@@ -57,7 +57,9 @@ export const permissionsAPI = {
if (params?.action) queryParams.set('action', params.action); if (params?.action) queryParams.set('action', params.action);
if (params?.search) queryParams.set('search', params.search); if (params?.search) queryParams.set('search', params.search);
const query = queryParams.toString(); const query = queryParams.toString();
const response = await api.get(`/v1/core/permissions/${query ? '?' + query : ''}`); // Sin slash final: la ruta backend es @router.get("") = /v1/core/permissions.
// Con slash FastAPI responde 307 y el cliente server-side no lo sigue.
const response = await api.get(`/v1/core/permissions${query ? '?' + query : ''}`);
return response.data; return response.data;
}, },
@@ -65,7 +67,7 @@ export const permissionsAPI = {
* Obtener un permiso por ID * Obtener un permiso por ID
*/ */
async getById(id: number): Promise<Permission> { async getById(id: number): Promise<Permission> {
const response = await api.get(`/v1/core/permissions/${id}/`); const response = await api.get(`/v1/core/permissions/${id}`);
return response.data; return response.data;
}, },
@@ -73,7 +75,7 @@ export const permissionsAPI = {
* Crear un nuevo permiso * Crear un nuevo permiso
*/ */
async create(data: CreatePermissionData): Promise<Permission> { async create(data: CreatePermissionData): Promise<Permission> {
const response = await api.post('/v1/core/permissions/', data); const response = await api.post('/v1/core/permissions', data);
return response.data; return response.data;
}, },
@@ -81,7 +83,7 @@ export const permissionsAPI = {
* Actualizar un permiso * Actualizar un permiso
*/ */
async update(id: number, data: UpdatePermissionData): Promise<Permission> { async update(id: number, data: UpdatePermissionData): Promise<Permission> {
const response = await api.put(`/v1/core/permissions/${id}/`, data); const response = await api.put(`/v1/core/permissions/${id}`, data);
return response.data; return response.data;
}, },
@@ -89,14 +91,14 @@ export const permissionsAPI = {
* Eliminar un permiso * Eliminar un permiso
*/ */
async delete(id: number): Promise<void> { async delete(id: number): Promise<void> {
await api.delete(`/v1/core/permissions/${id}/`); await api.delete(`/v1/core/permissions/${id}`);
}, },
/** /**
* Obtener módulos únicos * Obtener módulos únicos
*/ */
async getModules(): Promise<string[]> { async getModules(): Promise<string[]> {
const response = await api.get('/v1/core/permissions/modules/'); const response = await api.get('/v1/core/permissions/modules');
return response.data; return response.data;
}, },
@@ -104,7 +106,7 @@ export const permissionsAPI = {
* Obtener acciones únicas * Obtener acciones únicas
*/ */
async getActions(): Promise<string[]> { async getActions(): Promise<string[]> {
const response = await api.get('/v1/core/permissions/actions/'); const response = await api.get('/v1/core/permissions/actions');
return response.data; return response.data;
} }
}; };