Files
AnchorOS/docs/RESOURCES_UPDATE.md

8.7 KiB

Actualización de Recursos - AnchorOS

Cambios Realizados

Recursos Anteriores (Eliminados)

Los recursos tenían nombres descriptivos como:

  • "Sillón Pedicure 1", "Sillón Pedicure 2", "Sillón Pedicure 3"
  • "Estación Manicure 1", "Estación Manicure 2", "Estación Manicure 3", "Estación Manicure 4"
  • "Estación Maquillaje"
  • "Cama Pestañas"

Nuevos Recursos (Implementados)

Los recursos ahora usan códigos alfanuméricos estandarizados:

Tipo Código Cantidad Descripción
Maquillaje mkup 3 Estaciones de maquillaje
Pestañas lshs 1 Cama de pestañas
Pedicure pedi 4 Estaciones de pedicure
Manicure mani 4 Estaciones de manicure

Formato de Nombres

Los recursos siguen el patrón: {código}-{número}

Ejemplos:

  • mkup-01, mkup-02, mkup-03
  • lshs-01
  • pedi-01, pedi-02, pedi-03, pedi-04
  • mani-01, mani-02, mani-03, mani-04

Detalles por Tipo

Maquillaje (mkup)

  • Total: 3 estaciones por location
  • Tipo: station
  • Capacidad: 1 persona por estación
  • Uso: Servicios de maquillaje profesional

Pestañas (lshs)

  • Total: 1 cama por location
  • Tipo: station
  • Capacidad: 1 persona
  • Uso: Extensiones de pestañas

Pedicure (pedi)

  • Total: 4 estaciones por location
  • Tipo: station
  • Capacidad: 1 persona por estación
  • Uso: Servicios de pedicure

Manicure (mani)

  • Total: 4 estaciones por location
  • Tipo: station
  • Capacidad: 1 persona por estación
  • Uso: Servicios de manicure

Impacto en el Sistema

Bookings Eliminados

⚠️ IMPORTANTE: Debido a la restricción CASCADE DELETE en la tabla resources, todos los bookings que referenciaban los recursos anteriores han sido eliminados.

Esto significa que:

  • No hay bookings activos en el sistema
  • Los clientes deberán reprogramar sus citas
  • Se debe informar a los usuarios del cambio

Cómo Afecta al Kiosko

El kiosko ahora asignará recursos usando los nuevos códigos:

  • Cuando un cliente solicita maquillaje → asigna mkup-XX
  • Cuando un cliente solicita pestañas → asigna lshs-01
  • Cuando un cliente solicita pedicure → asigna pedi-XX
  • Cuando un cliente solicita manicure → asigna mani-XX

Mapeo de Servicios a Recursos

Para mantener la consistencia, los servicios deberían asignarse a los recursos correctos:

Servicio Recurso Recomendado Notas
Maquillaje Profesional mkup-XX Cualquiera de las 3 estaciones
Extensión de Pestañas lshs-01 Único recurso disponible
Pedicure Spa pedi-XX Cualquiera de las 4 estaciones
Manicure Gel mani-XX Cualquiera de las 4 estaciones
Uñas Acrílicas mani-XX Cualquiera de las 4 estaciones

Ejecutar la Migración

Opción 1: Via Supabase Dashboard

  1. Ve a: https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/sql
  2. Copia el contenido de supabase/migrations/20260116010000_update_resources.sql
  3. Pega en el SQL Editor
  4. Haz clic en "Run"
  5. Verifica el output en la consola

Opción 2: Via CLI (si está configurado)

supabase db push

Verificar la Migración

Consulta SQL para Ver Recursos

SELECT 
    l.name AS location,
    r.name AS resource_code,
    r.type AS resource_type,
    r.capacity,
    r.is_active
FROM resources r
JOIN locations l ON l.id = r.location_id
WHERE l.is_active = true
ORDER BY l.name, r.name;

Resultado Esperado

location          | resource_code | resource_type | capacity | is_active
------------------|---------------|---------------|----------|----------
ANCHOR:23 - Via KLAVA | lshs-01       | station       | 1        | true
ANCHOR:23 - Via KLAVA | mani-01       | station       | 1        | true
ANCHOR:23 - Via KLAVA | mani-02       | station       | 1        | true
ANCHOR:23 - Via KLAVA | mani-03       | station       | 1        | true
ANCHOR:23 - Via KLAVA | mani-04       | station       | 1        | true
ANCHOR:23 - Via KLAVA | mkup-01       | station       | 1        | true
ANCHOR:23 - Via KLAVA | mkup-02       | station       | 1        | true
ANCHOR:23 - Via KLAVA | mkup-03       | station       | 1        | true
ANCHOR:23 - Via KLAVA | pedi-01       | station       | 1        | true
ANCHOR:23 - Via KLAVA | pedi-02       | station       | 1        | true
ANCHOR:23 - Via KLAVA | pedi-03       | station       | 1        | true
ANCHOR:23 - Via KLAVA | pedi-04       | station       | 1        | true
TEST - Salón Principal | lshs-01       | station       | 1        | true
TEST - Salón Principal | mani-01       | station       | 1        | true
TEST - Salón Principal | mani-02       | station       | 1        | true
TEST - Salón Principal | mani-03       | station       | 1        | true
TEST - Salón Principal | mani-04       | station       | 1        | true
TEST - Salón Principal | mkup-01       | station       | 1        | true
TEST - Salón Principal | mkup-02       | station       | 1        | true
TEST - Salón Principal | mkup-03       | station       | 1        | true
TEST - Salón Principal | pedi-01       | station       | 1        | true
TEST - Salón Principal | pedi-02       | station       | 1        | true
TEST - Salón Principal | pedi-03       | station       | 1        | true
TEST - Salón Principal | pedi-04       | station       | 1        | true

Actualizar el Seed Data (Opcional)

Si deseas mantener el archivo de seed consistente, actualiza la sección de recursos en 20260115235900_seed_data.sql:

-- REEMPLAZAR ESTA SECCIÓN EN EL SEED
-- 2. Crear Resources (solo si no existen)
DO $$
BEGIN
    -- Para ANCHOR:23 - Via KLAVA
    FOR i IN 1..3 LOOP
        IF NOT EXISTS (
            SELECT 1 FROM resources r
            JOIN locations l ON l.id = r.location_id
            WHERE l.name = 'ANCHOR:23 - Via KLAVA' AND r.name = 'mkup-' || LPAD(i::TEXT, 2, '0')
        ) THEN
            INSERT INTO resources (location_id, name, type, capacity, is_active)
            SELECT id, 'mkup-' || LPAD(i::TEXT, 2, '0'), 'station', 1, true
            FROM locations WHERE name = 'ANCHOR:23 - Via KLAVA';
        END IF;
    END LOOP;

    INSERT INTO resources (location_id, name, type, capacity, is_active)
    SELECT id, 'lshs-01', 'station', 1, true
    FROM locations l
    WHERE l.name = 'ANCHOR:23 - Via KLAVA'
    AND NOT EXISTS (
        SELECT 1 FROM resources r 
        WHERE r.location_id = l.id AND r.name = 'lshs-01'
    );

    FOR i IN 1..4 LOOP
        IF NOT EXISTS (
            SELECT 1 FROM resources r
            JOIN locations l ON l.id = r.location_id
            WHERE l.name = 'ANCHOR:23 - Via KLAVA' AND r.name = 'pedi-' || LPAD(i::TEXT, 2, '0')
        ) THEN
            INSERT INTO resources (location_id, name, type, capacity, is_active)
            SELECT id, 'pedi-' || LPAD(i::TEXT, 2, '0'), 'station', 1, true
            FROM locations WHERE name = 'ANCHOR:23 - Via KLAVA';
        END IF;
    END LOOP;

    FOR i IN 1..4 LOOP
        IF NOT EXISTS (
            SELECT 1 FROM resources r
            JOIN locations l ON l.id = r.location_id
            WHERE l.name = 'ANCHOR:23 - Via KLAVA' AND r.name = 'mani-' || LPAD(i::TEXT, 2, '0')
        ) THEN
            INSERT INTO resources (location_id, name, type, capacity, is_active)
            SELECT id, 'mani-' || LPAD(i::TEXT, 2, '0'), 'station', 1, true
            FROM locations WHERE name = 'ANCHOR:23 - Via KLAVA';
        END IF;
    END LOOP;

    -- Repetir mismo patrón para otras locations...
END $$;

Notas Importantes

IDs de Resources

Cada location tendrá sus propios recursos con IDs únicos. Por ejemplo:

  • ANCHOR:23 - Via KLAVA → mkup-01 tiene un ID específico
  • TEST - Salón Principal → mkup-01 tiene un ID diferente

Agregar Nuevas Locations

Cuando agregues una nueva location, la migración de actualización de recursos (20260116010000_update_resources.sql) creará automáticamente los 12 recursos para ella:

  • 3 mkup
  • 1 lshs
  • 4 pedi
  • 4 mani

Modificar Cantidades

Si necesitas cambiar las cantidades en el futuro, modifica la migración:

-- Ejemplo: cambiar a 5 estaciones de maquillaje
FOR i IN 1..5 LOOP
    INSERT INTO resources ...
END LOOP;

Soporte y Troubleshooting

Error: "Resources table is empty"

  • Ejecuta la migración de actualización de recursos
  • Verifica que las locations estén activas

Error: "Booking references non-existent resource"

  • Esto es normal después de la migración
  • Los bookings anteriores fueron eliminados por CASCADE DELETE
  • Crea nuevos bookings con el sistema actualizado

Consulta para Ver Locations sin Recursos

SELECT l.id, l.name 
FROM locations l
LEFT JOIN resources r ON r.location_id = l.id
WHERE l.is_active = true 
AND r.id IS NULL;