Una API RESTful construida con NestJS para analizar estadísticas de restaurantes y oficinas de ventas corporativas del juego SimCompanies. Esta aplicación permite sincronizar tus datos desde la API oficial de SimCompanies y realizar análisis detallados de mercado y rendimiento.
SimCo Restaurant Stats API es una aplicación backend diseñada para jugadores de SimCompanies que desean analizar el rendimiento de sus restaurantes y el comportamiento del mercado de órdenes de venta.
- Sincronización de datos: Obtiene automáticamente datos de restaurantes y órdenes de venta desde la API oficial de SimCompanies
- Análisis de restaurantes: Rastrea métricas como rating, ocupancy, revenue, costs y reviews de restaurantes
- Análisis de mercado: Monitorea precios, demanda y tendencias de recursos en el mercado
- Gestión de edificios: Administra información de oficinas de ventas y restaurantes
- APIs de análisis: Proporciona endpoints especializados para obtener estadísticas y tendencias
- Optimización de restaurantes: Analiza el rendimiento histórico para mejorar la rentabilidad
- Investigación de mercado: Estudia tendencias de precios y demanda de recursos
- Toma de decisiones: Obtén insights basados en datos para estrategias comerciales
- Monitoreo automatizado: Seguimiento continuo del rendimiento de múltiples edificios
- NestJS - Framework de Node.js progresivo para aplicaciones escalables
- TypeScript - Superset tipado de JavaScript
- Node.js v18+ - Runtime de JavaScript
- PostgreSQL - Base de datos relacional robusta
- TypeORM - ORM para TypeScript y JavaScript
- pnpm - Gestor de paquetes eficiente y rápido
- @nestjs/axios - Cliente HTTP para integraciones con APIs externas
- @nestjs/config - Gestión de configuración y variables de entorno
- joi - Validación de esquemas de datos
- rxjs - Programación reactiva con observables
- ESLint - Linter para identificar y arreglar problemas en el código
- Prettier - Formateador de código automático
- Jest - Framework de testing
src/
├── auth/ # Módulo de autenticación
│ ├── controllers/ # Controladores de auth
│ ├── entities/ # Entidades de tokens
│ └── services/ # Servicios de autenticación
├── database/ # Configuración de base de datos
│ ├── migrations/ # Migraciones de TypeORM
│ └── typeorm.config.ts # Configuración de TypeORM
├── health/ # Health checks de la API
├── restaurant-stats/ # Módulo de estadísticas de restaurantes
│ ├── controllers/ # Endpoints de restaurantes
│ ├── entities/ # Entidades de restaurantes y edificios
│ └── services/ # Lógica de negocio de restaurantes
├── sales-orders-stats/ # Módulo de órdenes de venta
│ ├── controllers/ # Endpoints de órdenes de venta
│ ├── entities/ # Entidades de órdenes de venta
│ ├── interfaces/ # Interfaces de análisis
│ └── services/ # Lógica de negocio de órdenes
├── app.module.ts # Módulo principal
├── config.ts # Configuraciones globales
├── enviroments.ts # Configuración de entornos
└── main.ts # Punto de entrada de la aplicación
- Node.js v18 o superior
- PostgreSQL 15 o superior
- pnpm (recomendado) o npm
- Cuenta activa en SimCompanies
Crea un archivo .env en la raíz del proyecto:
# Base de datos
DATABASE_URL=postgresql://usuario:contraseña@localhost:5432/simco_restaurant_stats
# Credenciales de SimCompanies
GAME_EMAIL=tu_email@ejemplo.com
GAME_PASSWORD=tu_contraseña
# Configuración opcional
TIMEZONE_OFFSET=0
NODE_ENV=dev# Clonar el repositorio
$ git clone <url-del-repositorio>
$ cd simco-stats-api
# Instalar dependencias
$ pnpm install
# Ejecutar migraciones de base de datos
$ pnpm run migration:run# Desarrollo
$ pnpm run start
# Modo watch (recompilación automática)
$ pnpm run start:dev
# Modo producción
$ pnpm run start:prod# Generar nueva migración
$ pnpm run migration:gen --name=nombre-de-la-migracion
# Ejecutar migraciones pendientes
$ pnpm run migration:run
# Revertir última migración
$ pnpm run migration:revert
# Mostrar estado de migraciones
$ pnpm run migration:showPOST /auth/login- Iniciar sesión en SimCompanies
GET /health- Estado de la aplicación
GET /restaurant-stats- Últimas estadísticas agrupadas por restauranteGET /restaurant-stats/:id- Estadísticas de un restaurante específicoPOST /restaurant-stats/sync/:buildingId- Sincronizar un restaurantePOST /restaurant-stats/sync-all- Sincronizar todos los restaurantes
GET /buildings- Lista de todos los edificiosGET /buildings/:id- Información de un edificio específicoPOST /buildings/sync- Sincronizar edificios desde SimCompanies
GET /sale-orders- Lista de órdenes de ventaGET /sale-orders/:id- Orden específica por IDGET /sale-orders/status/resolved- Órdenes resueltasGET /sale-orders/status/pending- Órdenes pendientesGET /sale-orders/building/:buildingId- Órdenes por edificioPOST /sale-orders/sync/:buildingId- Sincronizar órdenes de un edificioPOST /sale-orders/sync-all- Sincronizar todas las órdenes
GET /sale-orders/analytics/prices/:date- Precios promedio por fechaGET /sale-orders/analytics/demand/:date- Demanda total por fechaGET /sale-orders/analytics/market-summary/:date- Resumen completo del mercadoGET /sale-orders/analytics/market-data/:startDate/:endDate- Datos históricosGET /sale-orders/analytics/top-demand/:date- Recursos más demandadosGET /sale-orders/analytics/stats- Estadísticas generales
curl http://localhost:3000/sale-orders/analytics/prices/2025-06-17Respuesta:
{
"date": "2025-06-17",
"total_sale_orders_analyzed": 45,
"resources": [
{
"resource_kind": 91,
"average_price": "125000.00",
"average_quality_bonus": "2.2816",
"total_orders": 15,
"total_amount": 45,
"min_price": "120000",
"max_price": "130000"
}
]
}curl -X POST http://localhost:3000/restaurant-stats/sync/12345678curl http://localhost:3000/sale-orders/analytics/demand/2025-06-17# Tests unitarios
$ pnpm run test
# Tests e2e
$ pnpm run test:e2e
# Cobertura de tests
$ pnpm run test:cov# Ejecutar linter
$ pnpm run lint
# Formatear código
$ pnpm run formatSe recomienda usar commits descriptivos siguiendo el formato:
tipo(scope): descripción
feat(auth): añadir autenticación con SimCompanies
fix(database): corregir migración de sale_orders
docs(readme): actualizar documentación de API
- Fork el proyecto
- Crea tu feature branch (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push al branch (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Para preguntas, problemas o sugerencias:
- Abre un issue en GitHub
- Contacta al equipo de desarrollo
- ✨ Sincronización inicial de datos de restaurantes
- ✨ Análisis de órdenes de venta
- ✨ APIs de análisis de mercado
- ✨ Gestión de edificios y oficinas de ventas
- ✨ Sistema de autenticación con SimCompanies