149 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| 
 | |
| # Proyecto de Widgets de Mercados Financieros
 | |
| 
 | |
| Este repositorio contiene la solución completa para la recolección, almacenamiento y visualización de datos de mercados financieros. La arquitectura está diseñada para ser robusta, escalable y fácil de mantener, separando las responsabilidades en un backend de .NET, un worker de fondo, y un frontend de React basado en widgets.
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## 🚀 Arquitectura General
 | |
| 
 | |
| El sistema se compone de los siguientes elementos principales:
 | |
| 
 | |
| 1.  **Backend (`Mercados.Api`):** Una API web de .NET 8 que expone los datos almacenados en la base de datos a través de endpoints RESTful.
 | |
| 2.  **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 Finance` y scraping) de forma programada, procesarlos y guardarlos en la base de datos.
 | |
| 3.  **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.
 | |
| 4.  **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**.
 | |
| 5.  **Documentación (`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:
 | |
| 
 | |
| 1.  **Clonar el Repositorio:**
 | |
|     ```bash
 | |
|     git clone [URL_DE_TU_REPOSITORIO_GITEA]
 | |
|     cd [NOMBRE_DE_LA_CARPETA]
 | |
|     ```
 | |
| 
 | |
| 2.  **Configurar Secretos del Backend:**
 | |
|     Este proyecto utiliza "User Secrets" para manejar información sensible en desarrollo. Configúralos desde la raíz del repositorio:
 | |
| 
 | |
|     ```bash
 | |
|     # 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
 | |
|     # ...
 | |
|     ```
 | |
| 
 | |
| 3.  **Instalar Dependencias del Frontend:**
 | |
|     ```bash
 | |
|     cd frontend
 | |
|     npm install
 | |
|     cd ..
 | |
|     ```
 | |
| 
 | |
| 4.  **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 `MercadosDb` y aplicará todas las migraciones necesarias.
 | |
|     ```bash
 | |
|     dotnet run --project src/Mercados.Api
 | |
|     ```
 | |
|     Puedes detenerla con `Ctrl+C` una 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.
 | |
| 
 | |
| 1.  **Iniciar el Backend API:**
 | |
|     ```bash
 | |
|     dotnet run --project src/Mercados.Api
 | |
|     ```
 | |
|     *La API estará disponible (por defecto) en `http://localhost:5045`.*
 | |
| 
 | |
| 2.  **Iniciar el Worker Service:**
 | |
|     ```bash
 | |
|     dotnet run --project src/Mercados.Worker
 | |
|     ```
 | |
|     *El worker comenzará a obtener datos según los horarios definidos en `appsettings.json`.*
 | |
| 
 | |
| 3.  **Iniciar el Frontend (Servidor de Desarrollo):**
 | |
|     ```bash
 | |
|     cd frontend
 | |
|     npm run dev
 | |
|     ```
 | |
|     *La 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:
 | |
| 
 | |
| 1.  **Compilar el Backend:**
 | |
|     ```bash
 | |
|     # Desde la raíz
 | |
|     dotnet build
 | |
|     ```
 | |
| 2.  **Generar la documentación TypeScript:**
 | |
|     ```bash
 | |
|     # Desde la carpeta /frontend
 | |
|     npm run doc:ts
 | |
|     ```
 | |
| 3.  **Construir el sitio DocFX:**
 | |
|     ```bash
 | |
|     # Desde la raíz, usando el archivo de configuración en /docs
 | |
|     docfx docs/docfx.json
 | |
|     ```
 | |
| 4.  **Visualizar la documentación:**
 | |
|     ```bash
 | |
|     # Desde la raíz
 | |
|     docfx serve docs/_site
 | |
|     ```
 | |
|     *Abre tu navegador en `http://localhost:8080`.*
 | |
| 
 | |
| ### Para ver la Librería de Componentes Visuales (Storybook):
 | |
| 
 | |
| ```bash
 | |
| # 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.
 | |
| 
 | |
| 1.  **Construir las imágenes de Docker:**
 | |
|     ```bash
 | |
|     # Desde la raíz del proyecto
 | |
|     docker compose build
 | |
|     ```
 | |
| 2.  **Lanzar el stack de servicios:**
 | |
|     Asegúrate de tener el archivo `.env` configurado en el servidor de producción antes de ejecutar.
 | |
|     ```bash
 | |
|     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. |