71 lines
3.0 KiB
SQL
71 lines
3.0 KiB
SQL
-- ============================================================================
|
|
-- OrbiQuant IA - Trading Platform
|
|
-- Schema: auth
|
|
-- File: tables/02-user_profiles.sql
|
|
-- Description: Extended user profile information
|
|
-- ============================================================================
|
|
|
|
CREATE TABLE auth.user_profiles (
|
|
-- Primary Key
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
-- Foreign Key to Users
|
|
user_id UUID NOT NULL UNIQUE,
|
|
|
|
-- Personal Information
|
|
first_name VARCHAR(100),
|
|
last_name VARCHAR(100),
|
|
display_name VARCHAR(200),
|
|
avatar_url TEXT,
|
|
bio TEXT,
|
|
|
|
-- Localization
|
|
language VARCHAR(10) DEFAULT 'en',
|
|
timezone VARCHAR(50) DEFAULT 'UTC',
|
|
country_code VARCHAR(2),
|
|
|
|
-- Preferences
|
|
newsletter_subscribed BOOLEAN NOT NULL DEFAULT false,
|
|
marketing_emails_enabled BOOLEAN NOT NULL DEFAULT false,
|
|
notifications_enabled BOOLEAN NOT NULL DEFAULT true,
|
|
|
|
-- Metadata
|
|
metadata JSONB DEFAULT '{}'::jsonb,
|
|
|
|
-- Audit Fields
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
-- Foreign Key Constraints
|
|
CONSTRAINT fk_user_profiles_user FOREIGN KEY (user_id)
|
|
REFERENCES auth.users(id)
|
|
ON DELETE CASCADE
|
|
);
|
|
|
|
-- Indexes for Performance
|
|
CREATE INDEX idx_user_profiles_user_id ON auth.user_profiles(user_id);
|
|
CREATE INDEX idx_user_profiles_display_name ON auth.user_profiles(display_name);
|
|
CREATE INDEX idx_user_profiles_country ON auth.user_profiles(country_code);
|
|
CREATE INDEX idx_user_profiles_metadata ON auth.user_profiles USING gin(metadata);
|
|
|
|
-- Table Comments
|
|
COMMENT ON TABLE auth.user_profiles IS 'Extended user profile information and preferences';
|
|
|
|
-- Column Comments
|
|
COMMENT ON COLUMN auth.user_profiles.id IS 'Unique identifier for the profile';
|
|
COMMENT ON COLUMN auth.user_profiles.user_id IS 'Reference to the user account';
|
|
COMMENT ON COLUMN auth.user_profiles.first_name IS 'User first name';
|
|
COMMENT ON COLUMN auth.user_profiles.last_name IS 'User last name';
|
|
COMMENT ON COLUMN auth.user_profiles.display_name IS 'Public display name';
|
|
COMMENT ON COLUMN auth.user_profiles.avatar_url IS 'URL to user avatar image';
|
|
COMMENT ON COLUMN auth.user_profiles.bio IS 'User biography or description';
|
|
COMMENT ON COLUMN auth.user_profiles.language IS 'Preferred language (ISO 639-1 code)';
|
|
COMMENT ON COLUMN auth.user_profiles.timezone IS 'User timezone (IANA timezone database)';
|
|
COMMENT ON COLUMN auth.user_profiles.country_code IS 'Country code (ISO 3166-1 alpha-2)';
|
|
COMMENT ON COLUMN auth.user_profiles.newsletter_subscribed IS 'Newsletter subscription preference';
|
|
COMMENT ON COLUMN auth.user_profiles.marketing_emails_enabled IS 'Marketing emails preference';
|
|
COMMENT ON COLUMN auth.user_profiles.notifications_enabled IS 'In-app notifications preference';
|
|
COMMENT ON COLUMN auth.user_profiles.metadata IS 'Additional profile metadata as JSON';
|
|
COMMENT ON COLUMN auth.user_profiles.created_at IS 'Timestamp when profile was created';
|
|
COMMENT ON COLUMN auth.user_profiles.updated_at IS 'Timestamp when profile was last updated';
|