# Base de Datos - Mecánicas Diesel ## Descripción Base de datos PostgreSQL para el sistema de gestión de talleres de mecánica diesel. ## Schemas | Schema | Descripción | |--------|-------------| | `service_management` | Órdenes de servicio, diagnósticos, cotizaciones | | `parts_management` | Inventario de refacciones específico del taller | | `vehicle_management` | Vehículos diesel, flotas, motores | **NOTA:** Los schemas `auth`, `core`, `inventory` se heredan de erp-core. ## Configuración ### 1. Variables de Entorno Copiar `.env.example` a `.env` y configurar: ```bash cp .env.example .env # Editar valores en .env ``` ### 2. Iniciar con Docker ```bash # Solo base de datos y Redis docker-compose up -d postgres redis # Verificar salud docker-compose ps # Ver logs docker-compose logs -f postgres ``` ### 3. Ejecutar Scripts Manualmente Si no usas Docker, ejecutar en orden: ```bash psql -U mecanicas_user -d mecanicas_diesel -f database/init/00-extensions.sql psql -U mecanicas_user -d mecanicas_diesel -f database/init/01-create-schemas.sql psql -U mecanicas_user -d mecanicas_diesel -f database/init/02-rls-functions.sql psql -U mecanicas_user -d mecanicas_diesel -f database/init/03-service-management-tables.sql psql -U mecanicas_user -d mecanicas_diesel -f database/init/04-parts-management-tables.sql psql -U mecanicas_user -d mecanicas_diesel -f database/init/05-vehicle-management-tables.sql psql -U mecanicas_user -d mecanicas_diesel -f database/init/06-seed-data.sql ``` ## Arquitectura Multi-Tenant ### Row-Level Security (RLS) Todas las tablas principales implementan RLS con políticas completas: ```sql -- Establecer tenant en sesión SELECT set_current_tenant_id('uuid-del-tenant'); -- Las queries se filtran automáticamente SELECT * FROM service_management.service_orders; -- Solo retorna órdenes del tenant actual ``` ### Crear Políticas RLS Para nuevas tablas: ```sql -- Automático: crea políticas SELECT, INSERT, UPDATE, DELETE SELECT create_tenant_rls_policies('schema_name', 'table_name'); ``` ## Tablas Principales ### service_management - `service_orders` - Órdenes de servicio - `order_items` - Líneas de trabajo/refacciones - `work_bays` - Bahías de trabajo - `diagnostics` - Diagnósticos realizados - `diagnostic_items` - Hallazgos del diagnóstico - `quotes` - Cotizaciones - `services` - Catálogo de servicios ### parts_management - `parts` - Refacciones - `part_categories` - Categorías - `suppliers` - Proveedores - `warehouse_locations` - Ubicaciones - `inventory_movements` - Kardex - `inventory_adjustments` - Ajustes ### vehicle_management - `vehicles` - Vehículos registrados - `vehicle_engines` - Especificaciones del motor - `fleets` - Flotas - `engine_catalog` - Catálogo de motores (global) - `maintenance_reminders` - Recordatorios ## Convenciones ### Nombres - Tablas: plural en inglés, snake_case - Columnas: snake_case - PKs: `id UUID` - FKs: `entity_id UUID` - Tenant: `tenant_id UUID` ### Campos Estándar ```sql id UUID PRIMARY KEY DEFAULT gen_random_uuid() tenant_id UUID NOT NULL created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() created_by UUID ``` ### Soft Delete (opcional) ```sql deleted_at TIMESTAMP WITH TIME ZONE deleted_by UUID ``` ## Triggers Automáticos - `trigger_set_updated_at()` - Actualiza `updated_at` en cada UPDATE - `update_fleet_vehicle_count()` - Mantiene conteo de vehículos en flotas ## Herramientas ### Adminer (UI de BD) ```bash docker-compose --profile tools up -d adminer # Acceder en http://localhost:8080 ``` ### Conexión Directa ```bash docker-compose exec postgres psql -U mecanicas_user -d mecanicas_diesel ``` ## Migraciones Para cambios futuros, usar el sistema de migraciones de tu ORM (Prisma, TypeORM, etc.). Ejemplo con Prisma: ```bash npx prisma migrate dev --name add_new_field ``` ## Backup ```bash # Backup docker-compose exec postgres pg_dump -U mecanicas_user mecanicas_diesel > backup.sql # Restore docker-compose exec -T postgres psql -U mecanicas_user -d mecanicas_diesel < backup.sql ```