Se trata de una API desarrollada para gestionar las mediciones de clientes en diferentes tipos de servicios. La aplicación utiliza Node.js, TypeScript, Prisma, Express.js y otras tecnologías para ofrecer un backend robusto y escalable.
- 📏 Aplicación de Precisión en React - Interfaz para el registro de mediciones de gas y agua
- Node.js: Entorno de ejecución para JavaScript en el backend.
- TypeScript: Superconjunto de JavaScript que añade tipado estático al código.
- Express.js: Framework web minimalista para Node.js.
- Prisma: ORM que facilita el acceso a la base de datos.
- MySQL: Base de datos utilizada durante el desarrollo.
- ESLint: Herramienta de linting para mantener el código limpio y estandarizado.
- Jest: Framework de pruebas utilizado para garantizar la calidad del código.
- Mocha: Utilizado para pruebas adicionales.
- Google Generative AI: Integrado para analizar imágenes de medidores y extraer valores numéricos de las mediciones.
- Swagger: Integrado para generar documentación para las rutas.
El proyecto sigue una estructura modular para facilitar el mantenimiento y la escalabilidad. Las principales carpetas y archivos son:
src/
: Contiene el código fuente de la aplicación.controllers/
: Lógica de control, donde se procesan las solicitudes.db/
: Genera una instancia de prisma para la conexión con la base de datos para toda la aplicación.exceptions/
: Crea excepciones personalizadas para manejar errores durante la ejecución de la aplicación.interfaces/
: Crea interfaces y tipos para manejar parámetros y retornos de funciones.middlewares/
: Middlewares para validaciones y tratamientos.models/
: Lógica de conexión con la base de datos.services/
: Capa de servicios que interactúa con Prisma y realiza operaciones de negocio.routes/
: Definición de las rutas de la API.utils/
: Funciones utilitarias, como manipulación de imágenes e interacción con la API de Google Generative AI.tests/
: Pruebas automatizadas para validar las funcionalidades.
- Listar Mediciones: Permite listar todas las mediciones de un cliente específico, filtrando por tipo de medición.
- Gestión de Imágenes: Las imágenes de mediciones se guardan y recuperan a través de URLs temporales, utilizando Base64.
- Validación de Parámetros: Middleware para validar parámetros de entrada, garantizando la integridad de las solicitudes.
- Análisis de Imágenes con Google Generative AI: La API analiza imágenes de mediciones y extrae el valor de consumo mostrado.
- Node.js
- Docker (opcional para el entorno de desarrollo)
-
Clona el repositorio:
git clone /~https://github.com/SamuelRocha91/apiShopper.git cd apiMeasureWaterAndGas
-
Instala las dependencias:
npm install
-
Configura las variables de entorno:
- Crea un archivo
.env
con las configuraciones necesarias. - Ejemplo:
DATABASE_URL="file:./dev.db" GEMINI_API_KEY="tu_clave_api_google" HOST="http://localhost:3000"
- Crea un archivo
-
Ejecuta las migraciones de la base de datos:
npx prisma migrate dev
-
Inicia el servidor:
npm run dev
Puedes ejecutar el proyecto utilizando Docker. Para ello, ejecuta:
docker-compose up --build
start
: Inicia la aplicación.dev
: Inicia la aplicación en modo de desarrollo.build
: Compila el código TypeScript a JavaScript.lint
: Ejecuta ESLint para verificar la conformidad del código.lint:fix
: Ejecuta ESLint y corrige problemas automáticamente.prisma:generate
: Genera los tipos de Prisma.prisma:migrate
: Ejecuta migraciones de la base de datos.prisma:seed
: Población de la base de datos con datos iniciales.docker
: Instala las dependencias, genera los tipos de Prisma, ejecuta migraciones e inicia el servidor utilizando Nodemon.test
: Ejecuta todas las pruebas usando Mocha y Jest.
Funciones utilitarias para guardar y generar URLs para imágenes:
saveBase64Image
: Guarda una imagen Base64 en un archivo en el servidor.getImageUrl
: Genera una URL temporal para acceder a la imagen.extractMimeType
: Extrae el tipo MIME de una imagen Base64.extractSize
: Calcula el tamaño de una imagen Base64.
La función checkMeasureValue
utiliza Google Generative AI para analizar imágenes de mediciones y extraer el valor de consumo.
async function checkMeasureValue(mime: string, base64: string): Promise<number> {
const result = await model.generateContent([
{
inlineData: {
mimeType: mime,
data: base64
}
},
{ text: PROMPT }
]);
return Number(result.response.text().match(/\d+/)[0]);
}
Esta función se utiliza para garantizar que el valor de la medición sea extraído con precisión a partir de la imagen proporcionada.
- 💎 BackEnd de Delivery
- 💳 [API de Pagos](
/~https://github.com/SamuelRocha91/paymentAPI/blob/main/README_es.md)