workspace-v1/projects/gamilit/database/ddl/schemas/auth/tables/01-users.sql
Adrian Flores Cortes 967ab360bb Initial commit: Workspace v1 with 3-layer architecture
Structure:
- control-plane/: Registries, SIMCO directives, CI/CD templates
- projects/: Gamilit, ERP-Suite, Trading-Platform, Betting-Analytics
- shared/: Libs catalog, knowledge-base

Key features:
- Centralized port, domain, database, and service registries
- 23 SIMCO directives + 6 fundamental principles
- NEXUS agent profiles with delegation rules
- Validation scripts for workspace integrity
- Dockerfiles for all services
- Path aliases for quick reference

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-23 00:35:19 -06:00

111 lines
4.8 KiB
SQL

-- =====================================================
-- Table: auth.users
-- Description: Tabla de usuarios del sistema con autenticación y roles
-- Created: 2025-10-27
--
-- 📚 Documentación:
-- Requerimiento: docs/01-requerimientos/01-autenticacion-autorizacion/RF-AUTH-001-roles.md
-- Requerimiento: docs/01-requerimientos/01-autenticacion-autorizacion/RF-AUTH-002-estados-cuenta.md
-- Especificación: docs/02-especificaciones-tecnicas/01-autenticacion-autorizacion/ET-AUTH-001-rbac.md
-- Especificación: docs/02-especificaciones-tecnicas/01-autenticacion-autorizacion/ET-AUTH-002-estados-cuenta.md
-- =====================================================
SET search_path TO auth, public;
DROP TABLE IF EXISTS auth.users CASCADE;
CREATE TABLE auth.users (
-- Core Supabase-compatible columns
instance_id uuid,
id uuid DEFAULT gen_random_uuid() NOT NULL,
aud varchar(255) DEFAULT 'authenticated',
role varchar(255),
email text NOT NULL,
encrypted_password text,
email_confirmed_at timestamp with time zone,
invited_at timestamp with time zone,
confirmation_token varchar(255),
confirmation_sent_at timestamp with time zone,
recovery_token varchar(255),
recovery_sent_at timestamp with time zone,
email_change_token_new varchar(255),
email_change varchar(255),
email_change_sent_at timestamp with time zone,
last_sign_in_at timestamp with time zone,
raw_app_meta_data jsonb,
raw_user_meta_data jsonb DEFAULT '{}'::jsonb,
is_super_admin boolean DEFAULT false,
created_at timestamp with time zone DEFAULT gamilit.now_mexico(),
updated_at timestamp with time zone DEFAULT gamilit.now_mexico(),
phone varchar(15),
phone_confirmed_at timestamp with time zone,
phone_change varchar(15),
phone_change_token varchar(255),
phone_change_sent_at timestamp with time zone,
confirmed_at timestamp with time zone,
email_change_token_current varchar(255),
email_change_confirm_status smallint DEFAULT 0,
banned_until timestamp with time zone,
reauthentication_token varchar(255),
reauthentication_sent_at timestamp with time zone,
is_sso_user boolean DEFAULT false,
deleted_at timestamp with time zone,
-- GAMILIT custom columns
gamilit_role auth_management.gamilit_role DEFAULT 'student'::auth_management.gamilit_role,
-- User account status (FE-051 Admin Portal)
status VARCHAR(50) NOT NULL DEFAULT 'active'
);
ALTER TABLE auth.users OWNER TO gamilit_user;
-- =====================================================
-- Constraints
-- =====================================================
-- Primary Key
ALTER TABLE ONLY auth.users
ADD CONSTRAINT users_pkey PRIMARY KEY (id);
-- Unique Constraints
ALTER TABLE ONLY auth.users
ADD CONSTRAINT users_email_key UNIQUE (email);
-- Status constraint (FE-051 Admin Portal)
ALTER TABLE auth.users
ADD CONSTRAINT users_status_check
CHECK (status IN ('active', 'inactive', 'suspended', 'deleted'));
-- =====================================================
-- Indexes
-- =====================================================
CREATE INDEX idx_auth_users_email ON auth.users USING btree (email);
CREATE INDEX idx_auth_users_role ON auth.users USING btree (role);
CREATE INDEX idx_auth_users_gamilit_role ON auth.users USING btree (gamilit_role);
-- =====================================================
-- Comments
-- =====================================================
COMMENT ON TABLE auth.users IS 'Tabla de usuarios del sistema con autenticación y roles';
COMMENT ON COLUMN auth.users.id IS 'Identificador único del usuario (UUID)';
COMMENT ON COLUMN auth.users.email IS 'Correo electrónico único del usuario';
COMMENT ON COLUMN auth.users.encrypted_password IS 'Contraseña encriptada del usuario';
COMMENT ON COLUMN auth.users.role IS 'Rol del usuario en el sistema (student, instructor, admin, etc.)';
COMMENT ON COLUMN auth.users.email_confirmed_at IS 'Fecha y hora de confirmación del email';
COMMENT ON COLUMN auth.users.last_sign_in_at IS 'Fecha y hora del último inicio de sesión';
COMMENT ON COLUMN auth.users.raw_user_meta_data IS 'Metadatos adicionales del usuario en formato JSON';
COMMENT ON COLUMN auth.users.deleted_at IS 'Fecha y hora de eliminación lógica (soft delete)';
COMMENT ON COLUMN auth.users.created_at IS 'Fecha y hora de creación del registro';
COMMENT ON COLUMN auth.users.updated_at IS 'Fecha y hora de última actualización del registro';
-- Status column (FE-051 Admin Portal)
COMMENT ON COLUMN auth.users.status IS 'User account status. Values: active (normal user, can login), inactive (temporarily deactivated), suspended (administratively suspended), deleted (soft deleted for audit trail)';
-- =====================================================
-- Grants
-- =====================================================
GRANT ALL ON TABLE auth.users TO gamilit_user;