Simulador de inversiones desarrollado con PHP (backend) y React + Vite (frontend).
API RESTful desarrollada con Slim Framework en PHP que simula un entorno de mercado financiero. Los usuarios pueden invertir en distintos activos usando un saldo virtual inicial. Permite gestionar usuarios, consultar cotizaciones, realizar operaciones de compra y venta, y mantener un historial de transacciones. La comunicación se realiza mediante JSON siguiendo el modelo CRUD.
- Slim Framework - Framework para la API REST
- PHP - Lenguaje principal del backend
- Composer - Gestión de dependencias
- JSON - Formato de intercambio de datos
- Docker - Contenerización del proyecto
- Docker Compose - Orquestación de contenedores
La API se ejecuta mediante Docker con el siguiente mapeo de puertos:
SLIM_PORT=80
Disponible en: http://localhost
# Construir contenedores
docker-compose build
# Levantar el proyecto
docker-compose up -d
# Detener contenedores
docker-compose downcomposer install
php -S localhost:8000POST http://localhost/trade/buy → Comprar activo
POST http://localhost/trade/sell → Vender activo
GET http://localhost/assets → Listar activos
GET http://localhost/transactions → Historial de transacciones
Aplicación web desarrollada con React y Vite que consume la API del backend.
- React - Librería de interfaz de usuario
- Vite - Bundler y servidor de desarrollo
- Bootstrap 5 - Diseño y componentes de UI
Utilizada para modales, botones, cards, alertas y diseño general.
npm install bootstrapImportada en main.jsx:
import 'bootstrap/dist/css/bootstrap.min.css'npm install
npm run devMotivo: se agregó el campo avg_purchase_price a la respuesta para que el frontend pueda mostrar si cada activo está al alza ↑ o a la baja ↓ respecto al precio de compra inicial. Se calcula como el promedio de todas las compras del usuario para ese activo usando un subquery sobre la tabla transactions.
Campo agregado en la respuesta:
{
"asset_id": 1,
"name": "Bitcoin",
"quantity": 2,
"current_price": "60000.00",
"total_value": "120000.00",
"avg_purchase_price": "55000.00"
}Modificacion: Se agregó el parámetro id en la ruta.
Motivo: se agregó el parámetro id en la ruta para permitir que un administrador pueda editar la información de cualquier usuario desde la sección Manejo de Usuarios, reutilizando el formulario de edición.
Modificacion: Se implementó el endpoint para obtener el historial de operaciones del usuario autenticado, incorporando filtros por tipo de operación (buy/sell) y activo (asset_id). Además, se modificó la consulta para incluir el nombre del activo (asset_name) mediante un JOIN con la tabla assets.
Motivo: se implementaron filtros por tipo de operación (buy/sell) y por activo (asset_id). Además se modificó la consulta para incluir el nombre del activo (asset_name) mediante un JOIN con la tabla assets, permitiendo visualizar el historial en la sección Mis Operaciones sin requerir consultas adicionales desde el frontend.
Modificacion: Se envia el id a travez del Header
Motivo: Para mantener los datos seguros.