- Implementar carga masiva de lecturas via Excel (backend y frontend) - Corregir cliente API para manejar respuestas con paginación - Eliminar referencias a device_id (columna inexistente) - Cambiar areaName por meterLocation en lecturas - Actualizar fetchProjects y fetchConcentrators para paginación - Agregar documentación del estado actual y cambios Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.3 KiB
3.3 KiB
Cambios Realizados en Esta Sesión
Fecha: 2026-01-23
Problema a Resolver
Pantalla en blanco al entrar a "Water Meters" y "Consumo" después de implementar carga masiva de lecturas.
Cambios Realizados
1. src/api/client.ts (línea ~224-237)
Cambio: Modificado parseResponse para manejar respuestas con paginación
// ANTES:
if ('success' in data) {
if (data.success === false) { throw... }
return data.data as T; // Solo devolvía data.data
}
// DESPUÉS:
if ('success' in data) {
if (data.success === false) { throw... }
// Si hay pagination, devolver objeto completo
if ('pagination' in data) {
return {
data: data.data,
pagination: data.pagination,
} as T;
}
return data.data as T;
}
2. src/api/readings.ts
Cambios en interface MeterReading:
// ELIMINADO:
deviceId: string | null;
areaName: string | null;
// AGREGADO:
meterLocation: string | null;
concentratorId: string;
concentratorName: string;
projectName: string;
Cambios en interface ReadingFilters:
// ELIMINADO:
areaName?: string;
// AGREGADO:
concentratorId?: string;
Cambios en interface ReadingInput:
// ELIMINADO:
deviceId?: string;
Cambios en función createReading:
// ELIMINADO de backendData:
device_id: data.deviceId,
3. src/api/projects.ts (función fetchProjects)
Cambio: Ahora maneja respuestas paginadas
// ANTES:
const response = await apiClient.get<Record<string, unknown>[]>('/api/projects');
return transformArray<Project>(response);
// DESPUÉS:
const response = await apiClient.get<...>('/api/projects');
if (response && typeof response === 'object' && 'data' in response && Array.isArray(response.data)) {
return transformArray<Project>(response.data);
}
return transformArray<Project>(response as Record<string, unknown>[]);
4. src/api/concentrators.ts (función fetchConcentrators)
Cambio: Mismo patrón que projects.ts para manejar paginación
5. src/pages/consumption/ConsumptionPage.tsx
Cambios:
- Línea ~94:
r.areaName→r.meterLocation(filtro de búsqueda) - Línea ~127:
"Área"→"Ubicación"(header CSV) - Línea ~132:
r.areaName→r.meterLocation(datos CSV) - Línea ~365:
"Área"→"Ubicación"(header tabla) - Línea ~428:
reading.areaName→reading.meterLocation(celda tabla)
6. water-api/src/services/reading.service.ts
Cambios previos (ya aplicados):
- Eliminadas todas las referencias a
device_iden queries SQL - La columna
device_idno existe en la tablameter_readings
Estado de los Servidores
Backend (puerto 3000) ✅ Funcionando
curl http://localhost:3000/api/readings?pageSize=1
# Devuelve datos correctamente
Frontend (puerto 5173) ⚠️ Pantalla blanca
- El servidor está corriendo
- Las páginas no renderizan correctamente
- Se necesita revisar la consola del navegador para ver el error específico
Para Debug
- Abrir http://localhost:5173
- F12 → Console
- Navegar a "Water Meters" o "Consumo"
- Copiar el error de la consola
El error más probable es:
Cannot read property 'map' of undefined- sitransformArrayrecibe undefinedTypeError: response.data is undefined- si la respuesta no tiene la estructura esperada