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.
| Ruta | Para qué |
|---|---|
POST /auth/users/sign-code | Primer paso del acceso: entrega un código para firmar con la cartera |
POST /auth/users/w3-login | Segundo paso: canjea la firma por un token de sesión |
POST /auth/users/refresh | Renueva el token |
DELETE /auth/users/logout | Cierra la sesión |
GET /monitoring/energystats | Estadísticas de energía |
GET /monitoring/powerflow | Flujo de potencia en tiempo real |
GET /users, GET /users/me | Datos del usuario |
Configuración
| Variable | Qué es | Valor |
|---|---|---|
DATABASE_URL | Conexión a su base zertiair | mysql://root:…@mariadb:3306/zertiair |
PORT | Puerto interno | 3000 (publicado como 3001) |
JWT_SECRET | Debe coincidir con el de la API de Zertipower | secreto |
ENVIRONMENT | Dejar en production | production |
ENVIRONMENT no es decorativoCon 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.
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.