-- ============================================================================== -- GAMILIT - SCHEMA CORE -- ============================================================================== -- Tablas fundamentales del sistema -- Mantenido por: Database-Agent -- Actualizado: 2025-12-18 -- ============================================================================== -- ------------------------------------------------------------------------------ -- FUNCION PARA UPDATED_AT -- ------------------------------------------------------------------------------ CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = CURRENT_TIMESTAMP; RETURN NEW; END; $$ language 'plpgsql'; -- ------------------------------------------------------------------------------ -- TABLA: TENANTS (Multi-tenancy) -- ------------------------------------------------------------------------------ CREATE TABLE IF NOT EXISTS tenants ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name VARCHAR(255) NOT NULL, slug VARCHAR(100) UNIQUE NOT NULL, settings JSONB DEFAULT '{}', status VARCHAR(50) DEFAULT 'active', created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX idx_tenants_slug ON tenants(slug); CREATE INDEX idx_tenants_status ON tenants(status); CREATE TRIGGER update_tenants_updated_at BEFORE UPDATE ON tenants FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); -- ------------------------------------------------------------------------------ -- TABLA: ROLES -- ------------------------------------------------------------------------------ CREATE TABLE IF NOT EXISTS roles ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name VARCHAR(100) NOT NULL, description TEXT, permissions JSONB DEFAULT '[]', tenant_id UUID REFERENCES tenants(id) ON DELETE CASCADE, is_system BOOLEAN DEFAULT false, created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, UNIQUE(name, tenant_id) ); CREATE INDEX idx_roles_tenant ON roles(tenant_id); CREATE TRIGGER update_roles_updated_at BEFORE UPDATE ON roles FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); -- ------------------------------------------------------------------------------ -- INSERTAR ROLES DEL SISTEMA -- ------------------------------------------------------------------------------ INSERT INTO roles (name, description, permissions, is_system) VALUES ('admin', 'Administrador del sistema', '["*"]', true), ('instructor', 'Instructor de cursos', '["courses:*", "students:read"]', true), ('student', 'Estudiante', '["courses:read", "progress:*", "achievements:read"]', true) ON CONFLICT DO NOTHING;