🚀 Arquitectura General
El sistema se compone de los siguientes elementos principales:
- Backend (
Mercados.Api): Una API web de .NET 9 que expone los datos almacenados en la base de datos a través de endpoints RESTful. - Worker Service (
Mercados.Worker): Un servicio de fondo de .NET 9 responsable de obtener los datos de fuentes externas (Finnhub,Bolsa de Comercio de Rosario,Yahoo Financey scraping) de forma programada, procesarlos y guardarlos en la base de datos. - Frontend (
frontend/): Una aplicación de React (construida con Vite + TypeScript) que proporciona un conjunto de "widgets" modulares y portátiles para visualizar los datos. - Base de Datos (
Mercados.Database): Utiliza SQL Server para la persistencia de los datos. El esquema es gestionado a través de migraciones con FluentMigrator. - Documentación(En Proceso) (
docs/): Un portal de documentación unificado generado con DocFX, TypeDoc y Storybook.
🛠️ Configuración del Entorno de Desarrollo
Para ejecutar este proyecto en un entorno local, necesitarás tener instalado:
- .NET 9 SDK
- Node.js (v20 o superior) y npm
- SQL Server (Developer o Express Edition)
- Docker y Docker Compose (Opcional, para simular el entorno de producción)
- DocFX Command Line Tool (Instalar con:
dotnet tool install -g docfx)
Pasos de Configuración Inicial:
-
Clonar el Repositorio:
git clone [URL_DEL_REPOSITORIO_GITEA] cd [NOMBRE_DE_LA_CARPETA_DONDE_SE_CLONÓ] -
Configurar Secretos del Backend: Este proyecto utiliza "User Secrets" para manejar información sensible en desarrollo. Configúralos desde la raíz del repositorio:
# Habilitar secretos para la API y el Worker dotnet user-secrets init --project src/Mercados.Api dotnet user-secrets init --project src/Mercados.Worker # Establecer los valores (reemplaza con tus datos) dotnet user-secrets set "ConnectionStrings:DefaultConnection" "Server=...;Database=..." --project src/Mercados.Api dotnet user-secrets set "ApiKeys:Finnhub" "tu_api_key" --project src/Mercados.Api # ...añadir el resto de las claves para ApiKeys y SmtpSettings # Repite el proceso para el Worker dotnet user-secrets set "ConnectionStrings:DefaultConnection" "..." --project src/Mercados.Worker # ... -
Instalar Dependencias del Frontend:
cd frontend npm install cd .. -
Crear y Migrar la Base de Datos: Simplemente ejecuta la API una vez. La primera vez que se inicie, FluentMigrator creará la base de datos
MercadosDby aplicará todas las migraciones necesarias.dotnet run --project src/Mercados.ApiPuedes detenerla con
Ctrl+Cuna vez que veas el mensaje "Application started".
🏃 Cómo Ejecutar el Proyecto
Para trabajar en el proyecto, necesitarás ejecutar los 3 servicios principales en terminales separadas.
-
Iniciar el Backend API:
dotnet run --project src/Mercados.ApiLa API estará disponible (por defecto) en
http://localhost:5045. -
Iniciar el Worker Service:
dotnet run --project src/Mercados.WorkerEl worker comenzará a obtener datos según los horarios definidos en
appsettings.json. -
Iniciar el Frontend (Servidor de Desarrollo):
cd frontend npm run devLa aplicación de React estará disponible en
http://localhost:5173.
📚 Documentación
Este proyecto incluye un portal de documentación unificado que cubre tanto el backend como el frontend.
Para Generar la Documentación:
- Compilar el Backend:
# Desde la raíz dotnet build - Generar la documentación TypeScript:
# Desde la carpeta /frontend npm run doc:ts - Construir el sitio DocFX:
# Desde la raíz, usando el archivo de configuración en /docs docfx docs/docfx.json - Visualizar la documentación:
Abre tu navegador en
# Desde la raíz docfx serve docs/_sitehttp://localhost:8080.
Para ver la Librería de Componentes Visuales (Storybook):
# Desde la carpeta /frontend
npm run storybook
Abre tu navegador en http://localhost:6006.
🐳 Despliegue en Producción (Docker)
El despliegue está diseñado para ser realizado con Docker y Docker Compose.
- Construir las imágenes de Docker:
# Desde la raíz del proyecto docker compose build - Lanzar el stack de servicios:
Asegúrate de tener el archivo
.envconfigurado en el servidor de producción antes de ejecutar.docker compose up -d
El docker-compose.yml está configurado para conectarse a una red externa shared-net para la base de datos y para ser gestionado por un proxy inverso externo como Nginx Proxy Manager.