Esteban 2d977b13b4 Convert user and role IDs from number to UUID string
Updated backend and frontend to use UUID strings instead of integers for user and role IDs
to match PostgreSQL database schema (UUID type).

Backend changes:
- Updated User and UserPublic interfaces: id and role_id now string (UUID)
- Updated JwtPayload: userId and roleId now string
- Updated user validators: role_id validation changed from number to UUID string
- Removed parseInt() calls in user controller (getUserById, updateUser, deleteUser, changePassword)
- Updated all user service function signatures to accept string IDs
- Updated create() and update() functions to accept role_id as string

Frontend changes:
- Updated User interface in users API: role_id is string
- Updated CreateUserInput and UpdateUserInput: role_id is string
- Added role filter in UsersPage sidebar
- Removed number conversion logic (parseInt)

This fixes the "invalid input syntax for type uuid" error when creating/updating users.
2026-01-26 19:49:15 -06:00
2025-12-15 16:50:49 -08:00
2025-12-15 16:50:49 -08:00
2025-12-15 16:50:49 -08:00
2025-12-15 16:50:49 -08:00
2025-12-15 16:50:49 -08:00
2025-12-15 16:50:49 -08:00
2026-01-08 19:43:25 +00:00

Water Project - Sistema de Gestion de Recursos Hidricos (GRH)

Sistema de gestion y monitoreo de infraestructura hidrica desarrollado con React, TypeScript y Vite.

Descripcion General

El Sistema de Gestion de Recursos Hidricos (GRH) es una aplicacion web frontend disenada para el monitoreo, administracion y control de infraestructura de toma de agua. Permite gestionar medidores, concentradores, proyectos, usuarios y roles a traves de una interfaz moderna y responsiva.

Caracteristicas Principales

  • Dashboard interactivo con KPIs, alertas e historial de actividades
  • Gestion de Medidores (Tomas de Agua) - CRUD completo con filtros por proyecto
  • Gestion de Concentradores - Configuracion de gateways LoRa/LoRaWAN
  • Gestion de Proyectos - Administracion de proyectos de infraestructura
  • Gestion de Usuarios y Roles - Control de acceso al sistema
  • Tema claro/oscuro - Personalizacion de la interfaz
  • Diseno responsive - Compatible con desktop, tablet y movil

Stack Tecnologico

Frontend

Tecnologia Version Proposito
React 18.2.0 Framework UI
TypeScript 5.2.2 Type safety
Vite 5.2.0 Build tool y dev server
Tailwind CSS 4.1.18 Estilos utility-first
Material-UI 7.3.6 Componentes UI
Recharts 3.6.0 Visualizacion de datos
Lucide React 0.559.0 Iconos SVG

Herramientas de Desarrollo

  • ESLint - Linting de codigo
  • TypeScript ESLint - Analisis estatico

Instalacion

Prerrequisitos

  • Node.js >= 18.x
  • npm >= 9.x o yarn >= 1.22

Pasos de Instalacion

  1. Clonar el repositorio
git clone <url-del-repositorio>
cd water-project
  1. Instalar dependencias
npm install
  1. Configurar variables de entorno
cp .env.example .env

Editar el archivo .env:

VITE_API_BASE_URL=https://tu-api-url.com
VITE_API_TOKEN=tu-token-de-api
  1. Iniciar servidor de desarrollo
npm run dev

La aplicacion estara disponible en http://localhost:5173


Scripts Disponibles

Comando Descripcion
npm run dev Inicia el servidor de desarrollo
npm run build Compila TypeScript y genera build de produccion
npm run preview Previsualiza el build de produccion
npm run lint Ejecuta ESLint en el codigo

Estructura del Proyecto

water-project/
├── public/                          # Assets estaticos
│   └── grhWatermark.jpg
│
├── src/
│   ├── api/                        # Capa de comunicacion con API
│   │   ├── me.ts                   # Endpoints de perfil
│   │   ├── meters.ts               # CRUD de medidores
│   │   ├── concentrators.ts        # CRUD de concentradores
│   │   └── projects.ts             # CRUD de proyectos
│   │
│   ├── components/
│   │   ├── layout/                 # Componentes de layout
│   │   │   ├── Sidebar.tsx         # Menu lateral
│   │   │   ├── TopMenu.tsx         # Barra superior
│   │   │   └── common/             # Componentes reutilizables
│   │   │       ├── ProfileModal.tsx
│   │   │       ├── ConfirmModal.tsx
│   │   │       └── Watermark.tsx
│   │   └── SettingsModals.tsx
│   │
│   ├── pages/                      # Paginas principales
│   │   ├── Home.tsx                # Dashboard
│   │   ├── LoginPage.tsx           # Login
│   │   ├── UsersPage.tsx           # Gestion de usuarios
│   │   ├── RolesPage.tsx           # Gestion de roles
│   │   ├── projects/
│   │   │   └── ProjectsPage.tsx
│   │   ├── meters/                 # Modulo de medidores
│   │   │   ├── MeterPage.tsx
│   │   │   ├── useMeters.ts        # Hook personalizado
│   │   │   ├── MetersTable.tsx
│   │   │   ├── MetersModal.tsx
│   │   │   └── MetersSidebar.tsx
│   │   └── concentrators/          # Modulo de concentradores
│   │       ├── ConcentratorsPage.tsx
│   │       ├── useConcentrators.ts
│   │       ├── ConcentratorsTable.tsx
│   │       ├── ConcentratorsModal.tsx
│   │       └── ConcentratorsSidebar.tsx
│   │
│   ├── assets/
│   │   └── images/
│   │
│   ├── App.tsx                     # Componente raiz
│   ├── main.tsx                    # Punto de entrada
│   └── index.css                   # Estilos globales
│
├── index.html
├── package.json
├── tsconfig.json
├── vite.config.ts
└── .env.example

Modulos Funcionales

1. Dashboard (Home)

El dashboard principal ofrece:

  • Selector de organismos operadores (CESPT TIJUANA, TECATE, MEXICALI)
  • Grafico de barras: "Numero de Medidores por Proyecto"
  • Tarjetas de acceso rapido: Tomas, Alertas, Mantenimiento, Reportes
  • Historial reciente de actividades
  • Panel de ultimas alertas

2. Gestion de Medidores

Modulo completo para administrar medidores/tomas de agua:

Funcionalidades:

  • Listado con busqueda y filtros
  • Filtrado por proyecto
  • Tipos de toma: GENERAL, LORA, LORAWAN, GRANDES
  • CRUD completo (Crear, Leer, Actualizar, Eliminar)

Campos principales:

  • Area, Numero de cuenta, Usuario, Direccion
  • Serial del medidor, Nombre, Estado
  • Tipo de protocolo, Particion DMA
  • Configuracion de dispositivo (Device EUI, AppKey, etc.)

3. Gestion de Concentradores

Administracion de concentradores y gateways:

Funcionalidades:

  • Listado con filtros por proyecto
  • Configuracion de Gateway (ID, EUI, Nombre)
  • Seleccion de ubicacion de antena (Indoor/Outdoor)
  • CRUD completo

4. Gestion de Proyectos

Administracion de proyectos de infraestructura:

  • Tabla con busqueda integrada
  • Estados: ACTIVE/INACTIVE
  • Informacion de operador y tiempos

5. Gestion de Usuarios

Control de usuarios del sistema:

  • Listado de usuarios
  • Asignacion de roles
  • Estados: ACTIVE/INACTIVE

6. Gestion de Roles

Administracion de roles de acceso:

  • Roles predefinidos: SUPER_ADMIN, USER
  • Descripcion de permisos

API y Comunicacion

Configuracion

La aplicacion se conecta a una API REST externa. Configurar en .env:

VITE_API_BASE_URL=https://tu-api.com
VITE_API_TOKEN=tu-token

Endpoints Principales

Recurso Endpoint Base
Medidores /api/v3/data/.../m4hzpnopjkppaav/records
Concentradores /api/v3/data/.../mheif1vdgnyt8x2/records
Proyectos /api/v3/data/.../m9882vn3xb31e29/records

Estructura de Respuesta

interface ApiResponse<T> {
  records: Array<{
    id: string;
    fields: T;
  }>;
  next?: string;
  prev?: string;
}

Modelos de Datos

Meter (Medidor)

interface Meter {
  id: string;
  createdAt: string;
  updatedAt: string;
  areaName: string;
  accountNumber: string | null;
  userName: string | null;
  userAddress: string | null;
  meterSerialNumber: string;
  meterName: string;
  meterStatus: string;
  protocolType: string;
  priceNo: string | null;
  priceName: string | null;
  dmaPartition: string | null;
  supplyTypes: string;
  deviceId: string;
  deviceName: string;
  deviceType: string;
  usageAnalysisType: string;
  installedTime: string;
}

Concentrator

interface Concentrator {
  id: string;
  "Area Name": string;
  "Device S/N": string;
  "Device Name": string;
  "Device Time": string;
  "Device Status": string;
  "Operator": string;
  "Installed Time": string;
  "Communication Time": string;
  "Instruction Manual": string;
}

Project

interface Project {
  id: string;
  areaName: string;
  deviceSN: string;
  deviceName: string;
  deviceType: string;
  deviceStatus: "ACTIVE" | "INACTIVE";
  operator: string;
  installedTime: string;
  communicationTime: string;
}

Autenticacion

Flujo de Login

  1. Usuario ingresa credenciales
  2. Validacion del checkbox "No soy un robot"
  3. Token almacenado en localStorage (grh_auth)
  4. Redireccion al Dashboard

Almacenamiento

// localStorage keys
grh_auth: { token: string, ts: number }
water_project_settings_v1: { theme: string, compactMode: boolean }

Configuracion de Temas

El sistema soporta tres modos de tema:

  • Sistema - Detecta preferencia del OS
  • Claro - Tema light
  • Oscuro - Tema dark

Configuracion persistida en localStorage bajo water_project_settings_v1.


Despliegue

Build de Produccion

npm run build

Los archivos compilados se generan en la carpeta dist/.

Configuracion de Vite

El servidor de desarrollo esta configurado para:

  • Puerto: 5173
  • Host: habilitado para acceso remoto
  • Hosts permitidos: localhost, 127.0.0.1, dominios personalizados

Contribucion

  1. Fork del repositorio
  2. Crear rama feature (git checkout -b feature/nueva-funcionalidad)
  3. Commit de cambios (git commit -m 'Agregar nueva funcionalidad')
  4. Push a la rama (git push origin feature/nueva-funcionalidad)
  5. Crear Pull Request

Licencia

Este proyecto es privado y pertenece a GRH - Gestion de Recursos Hidricos.


Contacto

Para soporte o consultas sobre el sistema, contactar al equipo de desarrollo.

Description
Sistema de Gestion de Recursos Hidricos (GRH) - Monitoreo y administracion de infraestructura de toma de agua
Readme 1.5 MiB
Languages
TypeScript 96.2%
PLpgSQL 2.8%
CSS 0.7%
Shell 0.2%