Actualizar README.md
This commit is contained in:
150
README.md
150
README.md
@@ -1,3 +1,149 @@
|
|||||||
# Mercados-Web
|
---
|
||||||
|
|
||||||
API y Worker para la recolección y exposición de datos de mercados financieros.
|
# 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 8 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.
|
||||||
Reference in New Issue
Block a user