|
|
|
|
|
|
|
|
| CREATE TABLE IF NOT EXISTS user_accounts (
|
| id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
| user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
| provider VARCHAR(50) NOT NULL,
|
| provider_account_id VARCHAR(255),
|
| access_token TEXT,
|
| refresh_token TEXT,
|
| expires_at TIMESTAMP,
|
| token_type VARCHAR(50),
|
| scope TEXT,
|
| id_token TEXT,
|
| session_state TEXT,
|
| created_at TIMESTAMP DEFAULT NOW(),
|
| updated_at TIMESTAMP DEFAULT NOW(),
|
|
|
|
|
| UNIQUE(provider, provider_account_id),
|
|
|
| UNIQUE(user_id, provider)
|
| );
|
|
|
|
|
| CREATE INDEX IF NOT EXISTS idx_user_accounts_user_id ON user_accounts(user_id);
|
| CREATE INDEX IF NOT EXISTS idx_user_accounts_provider ON user_accounts(provider, provider_account_id);
|
|
|
|
|
| CREATE TRIGGER update_user_accounts_updated_at BEFORE UPDATE ON user_accounts
|
| FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
|
|
|
| COMMENT ON TABLE user_accounts IS 'Linked authentication providers for users';
|
| COMMENT ON COLUMN user_accounts.provider IS 'Authentication provider: google, github, credentials';
|
| COMMENT ON COLUMN user_accounts.provider_account_id IS 'Unique identifier from the OAuth provider';
|
|
|