48 lines
1.6 KiB
PL/PgSQL
48 lines
1.6 KiB
PL/PgSQL
-- ============================================
|
|
-- MIGRACIÓN 001: Crear Schema y Tabla de Usuarios
|
|
-- ============================================
|
|
--
|
|
-- Crea el schema emerges_content y la tabla de usuarios
|
|
-- necesaria para autenticación del admin panel
|
|
--
|
|
|
|
-- Crear schema si no existe
|
|
CREATE SCHEMA IF NOT EXISTS emerges_content;
|
|
|
|
-- Tabla de usuarios
|
|
CREATE TABLE IF NOT EXISTS emerges_content.users (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
email TEXT UNIQUE NOT NULL,
|
|
username TEXT NOT NULL,
|
|
password_hash TEXT NOT NULL,
|
|
role TEXT NOT NULL DEFAULT 'editor',
|
|
is_active BOOLEAN NOT NULL DEFAULT true,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
last_login TIMESTAMPTZ
|
|
);
|
|
|
|
-- Índices
|
|
CREATE INDEX IF NOT EXISTS idx_users_email ON emerges_content.users(email);
|
|
CREATE INDEX IF NOT EXISTS idx_users_role ON emerges_content.users(role);
|
|
CREATE INDEX IF NOT EXISTS idx_users_is_active ON emerges_content.users(is_active);
|
|
|
|
-- Trigger para actualizar updated_at
|
|
CREATE OR REPLACE FUNCTION emerges_content.update_updated_at_column()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = NOW();
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
CREATE TRIGGER update_users_updated_at
|
|
BEFORE UPDATE ON emerges_content.users
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION emerges_content.update_updated_at_column();
|
|
|
|
-- Comentarios
|
|
COMMENT ON TABLE emerges_content.users IS 'Usuarios del sistema de administración';
|
|
COMMENT ON COLUMN emerges_content.users.role IS 'Rol del usuario: super_admin, editor_clinico, editor_formativo, revisor, viewer';
|
|
|