Saltar al contenido principal

API del Contador

Carpeta: smart-meter-backend/ · Puerto: 3001 · Perfil: smart-meter · Tecnología: NestJS + Prisma sobre MariaDB

API propia del Contador. Usa su propia base de datos, zertiair, dentro del mismo MariaDB que el resto del sistema.

Qué hace​

Resuelve el acceso de los socios y sirve los datos de monitorización que pinta la aplicación del Contador.

RutaPara qué
POST /auth/users/sign-codePrimer paso del acceso: entrega un código para firmar con la cartera
POST /auth/users/w3-loginSegundo paso: canjea la firma por un token de sesión
POST /auth/users/refreshRenueva el token
DELETE /auth/users/logoutCierra la sesión
GET /monitoring/energystatsEstadísticas de energía
GET /monitoring/powerflowFlujo de potencia en tiempo real
GET /users, GET /users/meDatos del usuario

Configuración​

VariableQué esValor
DATABASE_URLConexión a su base zertiairmysql://root:…@mariadb:3306/zertiair
PORTPuerto interno3000 (publicado como 3001)
JWT_SECRETDebe coincidir con el de la API de Zertipowersecreto
ENVIRONMENTDejar en productionproduction
ENVIRONMENT no es decorativo

Con el valor development, el servicio intenta leer un archivo .env que no existe dentro del contenedor y envía sus llamadas salientes por un proxy de depuración en 127.0.0.1:8080 sin validar el certificado. Dejarlo siempre en production.

JWT_SECRET tiene que ser idéntico al de la API de Zertipower porque el Contador inicia sesión aquí y luego usa ese mismo token contra aquella. Si difieren, todas esas llamadas responden 401.

Su base de datos nace vacía​

Este es el fallo abierto más importante del módulo.

sql/00_databases.sql crea la base zertiair, pero nadie aplica las cuatro migraciones de smart-meter-backend/prisma/migrations/. El Dockerfile ejecuta prisma generate, que genera el cliente de acceso y no crea ninguna tabla. El resultado es que el acceso falla en el último paso:

PrismaClientKnownRequestError:
The table `users` does not exist in the current database.

Se comprueba así:

./dev.sh exec mariadb mariadb -u root -proot -e "SHOW TABLES FROM zertiair;"

Si no devuelve nada, es esto. Para arreglarlo hacen falta dos cosas: copiar la carpeta prisma/ a la imagen final —hoy sólo se copian node_modules, dist y vendor— y ejecutar prisma migrate deploy al arrancar.

Dependencia privada resuelta​

Este módulo usaba @zertifier/criteria, un paquete alojado en un registro npm privado que exigía credenciales. Sin ellas, npm install fallaba con un 404 y el módulo no se podía compilar fuera de Zertifier.

El paquete está ahora en smart-meter-backend/vendor/ y package.json lo referencia como file:vendor/@zertifier/criteria. El lockfile se regeneró contra registry.npmjs.org, así que ya no queda ninguna referencia al registro privado.

Un detalle de la imagen

npm instala las dependencias file: como enlace simbólico relativo, de modo que la imagen final tiene que copiar también vendor/. Sin eso compila, pero arranca con MODULE_NOT_FOUND.