Tabla de contenidos
Introducción
Bank Microservices es mi propuesta de una aplicación bancaria, con arquitectura basada en microservicios y utilizando el stack MERN, que permite a los empleados crear, actualizar y eliminar cuentas, clientes y préstamos, almacenar préstamos en cadena y hacer predicciones sobre posibles incumplimientos de préstamos.
Detalles técnicos
El grueso de esta aplicación se compone de (i) contractos inteligentes, escritos en Solidity utilizando Hardhat, y testeados utilizando Foundry, (ii) código de back end, escrito en TypeScript utilizando Express.js y Python utilizando Flask, y (iii) código de front end, el cual está mayormente escrito en TypeScript utilizando Next.js, un framework de React.js.
Ambos, back end (todas las APIs menos las del servicio web de Flask) y front end, están implementados basados en una arquitectura hexagonal.
Además, se ha desarrollado un pipeline de scikit-learn que incluye un clasificador binario Skorch de red neuronal que envuelve una red neuronal de Pytorch.
Una optimización de hiperparámetros de ambos, modelo y entrenamiento, evaluados por validación cruzada se acomete en un cuaderno de Jupyter.
Finalmente, los datos se consultan en un nodo local de TheGraph utilizando GraphQL. El subgrafo que se utiliza esta diseñado para dar soporte a múltiples redes, datos relevantes del despliegue se transferirán en consecuencia.
Todos los microservicios tienen sus propias imágenes de Docker.
- Frameworks de contratos: Hardhat y Foundry
- Framework de front end: Next.js
- Framework de back end: Express.js y Flask
- Lenguaje de front end: TypeScript
- Lenguajes de back end: TypeScript y Python
- Lenguaje de consulta: GraphQL
- Recursos de datos: MongoDB y TheGraph
- Estilos: PostCSS
- Manager de dependencias de Python: Poetry
- Framework de aprendizaje automático: Pytorch
Perspectiva general
packages/*
: paquetes npm que contienen código y archivos de configuración que se utilizan para otros paquetes o servicios.services/*
: microservicios que constituyen la mayor parte de la aplicación.services/**/contracts/*
: contratos inteligentes escritos en lenguaje Solidity.services/**/scripts/*
: scripts de TypeScript para desplegar los contratos y escribir información relevante sobre ellos en los workspaces del front end y del subrafo.services/**/tasks/setState
: tarea de Hardhat para configurar un estado al nodo local.services/**/contracts/test/foundry/*
: contratos de test que se ejecutan con Foundry.services/client/src/app/*
: componentes funcionales de React.js, archivos de CSSModules, mixins de PostCSS y un archivo CSS global.services/client/src/features/*
: código de los servicios con el núcleo y fuentes de datos.services/client/src/**/shared/*
: código de interfaz de usuario compartido con archivos del mismo nivel de carpetas.services/**/subgraph/scripts/*
: script para generar un manifiesto del subgrafo manifest apartir de una plantilla, reemplazando llaves por valores desde un archivo JSON.services/**/subgraph/src/*
: mappings, escritos en AssemblyScript, constantes y entidades utilizados para extraer datos desde la cadena local de Hardhat, procesarlos y guardarlos.services/**/subgraph/templates/*
: una plantilla del manifiesto del subgrafo.services/**/api/**/core/*
: esta carpeta folder engloba la lógica de negocio de cada sevicio.services/**/api/**/controllers/*
: funciones para definir las operaciones deseadas por la API de la aplicación.services/**/api/**/data-sources/*
: clase que implementa métodos descritos en los repositorios.
Ejecución local
Esta aplicación utiliza pnpm y se configura para ejecutarse con Docker Compose.
Abra otra pestaña y :
Testeando los contratos
Entradas relacionadas
He escrito la siguiente entrada para explicar en detalle este proyecto:
Notas
Este proyecto se publica bajo licencia MIT.