-- Sistema de Gestión de Contenedores - Base de Datos -- Creación de base de datos y tablas -- NOTA: Se usan DROP TABLE para asegurar una instalación limpia. USE contenedor_ibiza1; -- Desactivar checks de llaves foráneas temporalmente para permitir drops SET FOREIGN_KEY_CHECKS = 0; -- Eliminar tablas si existen para evitar conflictos de estructura DROP TABLE IF EXISTS assignments; DROP TABLE IF EXISTS schedules; DROP TABLE IF EXISTS users; SET FOREIGN_KEY_CHECKS = 1; -- Tabla de usuarios CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, full_name VARCHAR(100) NOT NULL, role ENUM('admin', 'coordinador', 'ayudante') NOT NULL DEFAULT 'ayudante', active TINYINT(1) NOT NULL DEFAULT 1, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_role (role), INDEX idx_active (active) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- Tabla de horarios del contenedor CREATE TABLE schedules ( id INT AUTO_INCREMENT PRIMARY KEY, day_of_week TINYINT NOT NULL COMMENT '0=Domingo, 1=Lunes, ..., 6=Sábado', opening_time_1 TIME NULL COMMENT 'Primer horario de apertura', opening_time_2 TIME NULL COMMENT 'Segundo horario de apertura', updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY unique_day (day_of_week) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- Tabla de asignaciones/rotaciones CREATE TABLE assignments ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, week_number INT NOT NULL COMMENT 'Número de semana del año (1-53)', year INT NOT NULL, start_date DATE NOT NULL COMMENT 'Fecha de inicio (siempre domingo)', end_date DATE NOT NULL COMMENT 'Fecha de fin (siempre sábado)', order_position INT NOT NULL DEFAULT 0 COMMENT 'Posición en el orden para drag & drop', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, UNIQUE KEY unique_week (year, week_number), INDEX idx_user (user_id), INDEX idx_dates (start_date, end_date), INDEX idx_year_week (year, week_number) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- Insertar horarios por defecto INSERT INTO schedules (day_of_week, opening_time_1, opening_time_2) VALUES (0, '19:00:00', '22:00:00'), -- Domingo (1, '06:30:00', '09:00:00'), -- Lunes (2, '19:00:00', '22:00:00'), -- Martes (3, '06:30:00', '09:00:00'), -- Miércoles (4, '19:00:00', '22:00:00'), -- Jueves (5, '06:30:00', '06:30:00'), -- Viernes (6, NULL, NULL); -- Sábado (cerrado) -- Insertar usuario administrador por defecto -- Password: admin123 INSERT INTO users (username, password, full_name, role, active) VALUES ('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Administrador', 'admin', 1); -- Insertar usuarios helpers de ejemplo INSERT INTO users (username, password, full_name, role, active) VALUES ('ana', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Ana García', 'ayudante', 1), ('esperanza', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Esperanza López', 'ayudante', 1), ('mary', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Mary Martínez', 'ayudante', 1), ('bety', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Bety Rodríguez', 'ayudante', 1), ('mariela', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Mariela Sánchez', 'ayudante', 1), ('coord1', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Coordinador Ejemplo', 'coordinador', 1);