Sitelet https://github.com/plazasgiovanny/PoliMarket-Backend/tree/master/Database
Skip to content

Latest commit

 

History

History

README.md

Scripts de Base de Datos - PoliMarket Backend

📋 Descripción

Este directorio contiene todos los scripts SQL necesarios para configurar y poblar la base de datos de PoliMarket con datos de prueba.


📁 Archivos Disponibles

Archivo Descripción Orden
RecreateDatabase.sql Elimina y recrea la base de datos desde cero -
AddMissingColumns.sql Agrega columnas faltantes (si es necesario) -
SeedData.sql Datos de prueba para Security (usuarios y roles) 1️⃣
SeedData_Inventory.sql Datos de prueba para Inventory (productos y proveedores) 2️⃣
SeedData_Sales.sql Datos de prueba para Sales (clientes) 3️⃣
SeedData_Logistics.sql Datos de prueba para Logistics (facturas y órdenes) 4️⃣
LoadAllSeedData.sql Script maestro que ejecuta todos los anteriores ⭐

🚀 Guía de Uso

Opción 1: Cargar Todos los Datos (Recomendado)

Ejecuta el script maestro que carga todos los módulos en el orden correcto:

sqlcmd -S .\SQLEXPRESS -d PoliMarketDb -i Database\LoadAllSeedData.sql

✅ Ventajas:

  • Un solo comando
  • Orden correcto garantizado
  • Resumen completo al final
  • Verifica integridad de datos

Opción 2: Cargar Módulos Individualmente

Si necesitas cargar solo módulos específicos:

1. Módulo Security (Usuarios y Roles)

sqlcmd -S .\SQLEXPRESS -d PoliMarketDb -i Database\SeedData.sql

Datos creados:

  • 5 roles (Administrador, Vendedor Activo, etc.)
  • 4 usuarios de prueba
  • Credenciales predeterminadas

2. Módulo Inventory (Productos y Proveedores)

sqlcmd -S .\SQLEXPRESS -d PoliMarketDb -i Database\SeedData_Inventory.sql

Datos creados:

  • 10 productos con stock
  • 5 proveedores
  • Relaciones productos-proveedores

3. Módulo Sales (Clientes)

sqlcmd -S .\SQLEXPRESS -d PoliMarketDb -i Database\SeedData_Sales.sql

Datos creados:

  • 10 clientes con direcciones completas
  • Emails únicos
  • Diferentes perfiles (empresarial, comercial, retail)

4. Módulo Logistics (Facturas y Órdenes)

sqlcmd -S .\SQLEXPRESS -d PoliMarketDb -i Database\SeedData_Logistics.sql

Datos creados:

  • 5 facturas con detalles
  • 5 órdenes de entrega (estado: Pending)
  • 10 movimientos de inventario
  • Stock actualizado según ventas

📊 Datos de Prueba Creados

Security Module

Usuario Contraseña Rol Estado
admin admin123 Administrador ✅ Activo
jperez password123 Vendedor Activo ✅ Activo
mlopez password123 Vendedor Activo ✅ Activo
lgomez password123 Vendedor Inactivo ❌ Inactivo

Inventory Module

  • 10 Productos: Laptops, teclados, mouses, monitores, impresoras, etc.
  • 5 Proveedores: Dell, HP, Logitech, Samsung, Epson
  • Stock Inicial: Cada producto con cantidad disponible

Sales Module

  • 10 Clientes: Empresas, comerciales y retail
  • Todos con direcciones completas para entregas
  • Emails únicos para identificación

Logistics Module

  • 5 Facturas con ventas reales
  • 5 Órdenes de Entrega (todas en estado "Pending")
  • 10 Movimientos de Inventario registrados
  • Stock actualizado reflejando las ventas

🔄 Orden de Ejecución (Importante)

Los scripts DEBEN ejecutarse en este orden debido a las dependencias de Foreign Keys:

1. SeedData.sql           (Security - usuarios y roles)
      ↓
2. SeedData_Inventory.sql (Inventory - productos y proveedores)
      ↓
3. SeedData_Sales.sql     (Sales - clientes)
      ↓
4. SeedData_Logistics.sql (Logistics - facturas y órdenes)

⚠️ Ejecutar en orden incorrecto causará errores de Foreign Key


🧪 Testing de Requisitos Funcionales

Los datos de prueba permiten testear todos los RF implementados:

RF01: Gestión Centralizada de Autorizaciones

# Usuario activo puede vender
Vendedor: jperez / password123

# Usuario inactivo no puede vender
Vendedor inactivo: lgomez / password123

RF02: Inicio de Sesión

POST /api/Security/login
{
  "username": "jperez",
  "password": "password123"
}

RF03: Consulta de Disponibilidad

# Consultar stock de Laptop Dell XPS 13
GET /api/Inventory/products/1/stock

RF04: Registro de Salida de Stock

# Las facturas ya creadas tienen movimientos registrados
SELECT * FROM Inventory.InventoryMovements WHERE EntityName = 'Invoice';

RF05: Generación Automática de Órdenes

# Ver órdenes pendientes generadas automáticamente
GET /api/Logistics/delivery-orders/pending

# Todas las 5 facturas tienen órdenes asociadas
GET /api/Logistics/delivery-orders

🛠️ Comandos Útiles

Ver Resumen de Datos

-- Contar registros por módulo
SELECT 'Users' AS Tabla, COUNT(*) AS Total FROM Security.Users
UNION ALL
SELECT 'Products', COUNT(*) FROM Inventory.Products
UNION ALL
SELECT 'Customers', COUNT(*) FROM Sales.Customers
UNION ALL
SELECT 'Invoices', COUNT(*) FROM Sales.Invoices
UNION ALL
SELECT 'DeliveryOrders', COUNT(*) FROM Logistics.DeliveryOrders;

Ver Órdenes Pendientes

SELECT 
    do.Id,
    i.Id AS InvoiceId,
    c.Name AS Customer,
    do.DeliveryAddress,
    do.DeliveryStatus,
    i.TotalAmount
FROM Logistics.DeliveryOrders do
INNER JOIN Sales.Invoices i ON do.InvoiceId = i.Id
INNER JOIN Sales.Customers c ON i.CustomerId = c.Id
WHERE do.DeliveryStatus = 'Pending';

Ver Stock Actualizado

SELECT 
    Code,
    Name,
    QuantityAvailable,
    MinStockLevel
FROM Inventory.Products
ORDER BY QuantityAvailable;

🔄 Limpiar y Recargar Datos

Si necesitas reiniciar los datos de prueba:

  1. Los scripts incluyen secciones de limpieza automática
  2. Ejecuta LoadAllSeedData.sql nuevamente
  3. Los datos anteriores serán eliminados y reemplazados

⚠️ ADVERTENCIA: Esto eliminará todos los datos existentes en las tablas


📝 Notas Importantes

  1. Prerequisitos:

    • Base de datos PoliMarketDb debe existir
    • Migraciones de EF Core deben estar aplicadas
    • SQL Server debe estar ejecutándose
  2. Conexión:

    • Ajusta el servidor según tu configuración
    • Ejemplo: .\SQLEXPRESS, localhost, (local)
  3. Permisos:

    • El usuario debe tener permisos de INSERT, UPDATE, DELETE
    • Se requiere acceso a todos los esquemas (Security, Inventory, Sales, Logistics)
  4. Integridad:

    • Todos los scripts respetan Foreign Keys
    • Los datos son coherentes entre módulos
    • Las cantidades y montos son realistas

🐛 Solución de Problemas

Error: "Cannot insert duplicate key"

Causa: Ya existen datos con los mismos IDs
Solución: Ejecutar la sección de limpieza del script o eliminar datos manualmente

Error: "Foreign Key constraint violation"

Causa: Orden de ejecución incorrecto
Solución: Ejecutar scripts en el orden especificado (1→2→3→4)

Error: "Invalid object name"

Causa: Migraciones no aplicadas
Solución: Ejecutar dotnet ef database update primero

Error: "Cannot open database"

Causa: Base de datos no existe
Solución: Crear base de datos o ejecutar migraciones


📞 Soporte

Para más información, consultar:


Última actualización: Noviembre 2024
Versión: 1.1.0
Estado: ✅ Completado para todos los RF (RF01-RF05)