docker compose up --build- Accede a http://localhost:8090/frontend/index.html
- Login con usuario demo:
trader1/passwordotrader2/password
Plataforma web interactiva para operaciones de FX (Foreign Exchange) que permite:
- Visualización de instrumentos financieros en tiempo real
- Configuración de parámetros por instrumento
- Envío de configuraciones mediante WebSocket
- Sistema completo de notificaciones
- Gestión de usuarios con autenticación
Los datos de precios son generados aleatoriamente simulando cotizaciones reales de FX.
- Frontend: HTML5 + JavaScript Vanilla + CSS3
- Backend: PHP 8.x
- Base de Datos: MariaDB/MySQL 8.0+
- WebSocket Server: Python 3.8+ con librería
websockets - Servidor Web: Apache (via Laragon)
fx-platform/
├── assets/ # Recursos estáticos (logos, imágenes)
├── backend/ # APIs y lógica del servidor PHP
│ ├── login.php # Autenticación de usuarios
│ ├── check_session.php # Validación de sesión
│ ├── data_simulation.php # Datos simulados FX
│ └── load_user_configs.php # Configuraciones guardadas
├── db/ # Scripts de base de datos
│ └── init.sql # Inicialización completa de BD
├── frontend/ # Interfaz de usuario
│ ├── index.html # Página de login
│ └── dashboard.html # Panel principal FX
├── websocket/ # Servidor WebSocket Python
│ ├── websocket_server.py # Servidor principal
│ ├── requirements.txt # Dependencias Python
│ └── start_server.bat # Script de inicio Windows
└── README.md # Esta documentación
- Laragon 6.0+ (o XAMPP/WAMP)
- Python 3.8 o superior
- MariaDB/MySQL 8.0+
# Opción A: Git
git clone https://github.com/signorinileandro/fx-platform.git C:\laragon\www\fx-platform
# Opción B: Copiar manualmente a C:\laragon\www\fx-platform- Abrir HeidiSQL (incluido en Laragon)
- Conectar a MySQL local (usuario: root, sin password)
- Ejecutar el script completo:
db/init.sql - Verificar que se crearon las tablas:
usersinstrumentsuser_instrument_configswebsocket_submissionsnotifications
# Abrir terminal en la carpeta websocket/
cd C:\laragon\www\fx-platform\websocket
# Instalar dependencias
pip install -r requirements.txt-
Iniciar Laragon (Apache + MySQL)
-
Iniciar WebSocket Server:
# Opción A: Ejecutar el .bat (Asume que el proyecto está en: C:\laragon\www\fx-platform\) start_server.bat # Opción B: Comando manual python websocket_server.py
-
Acceder a la aplicación:
http://localhost/fx-platform/frontend/index.html
| Usuario | Contraseña | Descripción |
|---|---|---|
trader1 |
password |
Usuario con configuraciones EUR/USD y GBP/USD |
trader2 |
password |
Usuario con configuraciones USD/ARS y AUD/ARS |
| Endpoint | Método | Descripción | Parámetros |
|---|---|---|---|
/backend/login.php |
POST | Autenticación | {username, password} |
/backend/check_session.php |
GET | Validar sesión activa | - |
/backend/data_simulation.php |
GET | Datos FX simulados | - |
/backend/load_user_configs.php |
GET | Configuraciones del usuario | - |
fetch("/backend/login.php", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
username: "trader1",
password: "password",
}),
});fetch("/backend/data_simulation.php")
.then((res) => res.json())
.then((data) => console.log(data));const ws = new WebSocket("ws://localhost:8080");{
"type": "fx_config",
"user_id": 1,
"username": "trader1",
"timestamp": "2024-08-08T15:30:00.000Z",
"configurations": [
{
"instrument": "EURUSD",
"target_price": 1.085,
"target_qty": 10000.0,
"operation": "buy"
},
{
"instrument": "USDJPY",
"target_price": 150.25,
"target_qty": 5000.0,
"operation": "sell"
}
]
}{
"type": "fx_config_confirmation",
"status": "success",
"message": "Configuraciones recibidas y procesadas correctamente",
"timestamp": "2024-08-08T15:30:01.000Z",
"user_id": 1,
"configs_processed": 2,
"configurations": [...]
}users ----< user_instrument_configs >---- instruments
| |
| |
v v
notifications websocket_submissions
- Almacena credenciales y datos de usuarios
- Contraseñas hasheadas con
password_hash()
- Instrumentos FX disponibles (USD/ARS, EUR/USD, etc.)
- Base currency y quote currency
- Configuraciones personalizadas por usuario/instrumento
- Precio objetivo, cantidad, tipo de operación
- Historial de envíos por WebSocket
- Status de procesamiento y datos JSON
- Sistema de notificaciones por usuario
- Tipos: success, error, info, warning
- ✅ Login exitoso con credenciales válidas
- ✅ Rechazo con credenciales inválidas
- ✅ Redirección automática al dashboard
- ✅ Protección de rutas sin autenticación
- ✅ Carga de instrumentos FX
- ✅ Actualización automática cada 5 segundos
- ✅ Formato correcto de precios (4 decimales)
- ✅ Separadores de miles en cantidades
- ✅ Inputs por instrumento individual
- ✅ Validación de campos requeridos
- ✅ Persistencia entre sesiones
- ✅ Indicación visual de errores
- ✅ Conexión automática al cargar dashboard
- ✅ Envío de configuraciones en JSON estructurado
- ✅ Recepción de confirmaciones del servidor
- ✅ Manejo de desconexiones
- ✅ Notificaciones de éxito/error
- ✅ Timestamps automáticos
- ✅ Auto-eliminación después de 30 segundos
- ✅ Categorización por colores
- Iniciar todos los servicios (Laragon + WebSocket)
- Login con trader1 → Verificar configuraciones precargadas
- Modificar parámetros → Enviar por WebSocket
- Cerrar sesión → Login con trader2
- Verificar aislamiento de datos entre usuarios
- Probar desconexión WebSocket → Reconexión automática
$DB_CONFIG = [
'host' => $_ENV['DB_HOST'] ?? 'localhost',
'name' => $_ENV['DB_NAME'] ?? 'fx_platform',
'user' => $_ENV['DB_USER'] ?? 'root',
'pass' => $_ENV['DB_PASS'] ?? ''
];
$WS_CONFIG = [
'host' => $_ENV['WS_HOST'] ?? 'localhost',
'port' => $_ENV['WS_PORT'] ?? 8080
];- PHP:
error_log()para errores de BD y autenticación - Python: Logger configurado para conexiones WebSocket
- JavaScript: Console.log para debugging del frontend
docker compose up --build# Levantar proyecto
docker compose up
# Detener
docker compose downDesarrollado por: Leandro Signorini
Email: signorinileandro@gmail.com