From 0d8c4ddf622de1922857d9910ff6277e361d2055 Mon Sep 17 00:00:00 2001 From: Ernesto Herrera Date: Fri, 17 Jul 2026 16:51:18 -0600 Subject: [PATCH] =?UTF-8?q?fix(crm):=20cat=C3=A1logo=20de=20permisos=20no?= =?UTF-8?q?=20cargaba=20por=20redirect=20307=20(slash=20final)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- .../src/lib/api/dashboard/admin/permissions.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/frontend/src/lib/api/dashboard/admin/permissions.ts b/frontend/src/lib/api/dashboard/admin/permissions.ts index e6d2ef0..9da2d23 100644 --- a/frontend/src/lib/api/dashboard/admin/permissions.ts +++ b/frontend/src/lib/api/dashboard/admin/permissions.ts @@ -57,7 +57,9 @@ export const permissionsAPI = { if (params?.action) queryParams.set('action', params.action); if (params?.search) queryParams.set('search', params.search); 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; }, @@ -65,7 +67,7 @@ export const permissionsAPI = { * Obtener un permiso por ID */ async getById(id: number): Promise { - const response = await api.get(`/v1/core/permissions/${id}/`); + const response = await api.get(`/v1/core/permissions/${id}`); return response.data; }, @@ -73,7 +75,7 @@ export const permissionsAPI = { * Crear un nuevo permiso */ async create(data: CreatePermissionData): Promise { - const response = await api.post('/v1/core/permissions/', data); + const response = await api.post('/v1/core/permissions', data); return response.data; }, @@ -81,7 +83,7 @@ export const permissionsAPI = { * Actualizar un permiso */ async update(id: number, data: UpdatePermissionData): Promise { - const response = await api.put(`/v1/core/permissions/${id}/`, data); + const response = await api.put(`/v1/core/permissions/${id}`, data); return response.data; }, @@ -89,14 +91,14 @@ export const permissionsAPI = { * Eliminar un permiso */ async delete(id: number): Promise { - await api.delete(`/v1/core/permissions/${id}/`); + await api.delete(`/v1/core/permissions/${id}`); }, /** * Obtener módulos únicos */ async getModules(): Promise { - const response = await api.get('/v1/core/permissions/modules/'); + const response = await api.get('/v1/core/permissions/modules'); return response.data; }, @@ -104,7 +106,7 @@ export const permissionsAPI = { * Obtener acciones únicas */ async getActions(): Promise { - const response = await api.get('/v1/core/permissions/actions/'); + const response = await api.get('/v1/core/permissions/actions'); return response.data; } };