42 lines
1.8 KiB
SQL
42 lines
1.8 KiB
SQL
-- Tenant registry schema for MVP Platform Tenants Service
|
|
-- Creates core tenant management tables
|
|
|
|
-- Tenant registry
|
|
CREATE TABLE IF NOT EXISTS tenants (
|
|
id VARCHAR(100) PRIMARY KEY, -- 'admin', 'acme-corp', etc.
|
|
name VARCHAR(255) NOT NULL, -- Display name
|
|
subdomain VARCHAR(100) UNIQUE NOT NULL, -- Same as id for simplicity
|
|
status VARCHAR(50) DEFAULT 'active', -- active, pending, suspended
|
|
admin_user_id VARCHAR(255), -- Auth0 user ID of tenant admin
|
|
settings JSONB DEFAULT '{}', -- Tenant-specific configuration
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Create indexes for performance
|
|
CREATE INDEX IF NOT EXISTS idx_tenants_status ON tenants(status);
|
|
CREATE INDEX IF NOT EXISTS idx_tenants_admin_user ON tenants(admin_user_id);
|
|
|
|
-- Tenant signup approval workflow
|
|
CREATE TABLE IF NOT EXISTS tenant_signups (
|
|
id SERIAL PRIMARY KEY,
|
|
tenant_id VARCHAR(100) REFERENCES tenants(id),
|
|
user_email VARCHAR(255) NOT NULL,
|
|
user_auth0_id VARCHAR(255), -- Auth0 user ID after signup
|
|
status VARCHAR(50) DEFAULT 'pending', -- pending, approved, rejected
|
|
requested_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
approved_by VARCHAR(255), -- Auth0 ID of approving admin
|
|
approved_at TIMESTAMP,
|
|
rejected_at TIMESTAMP,
|
|
rejection_reason TEXT
|
|
);
|
|
|
|
-- Create indexes for signup queries
|
|
CREATE INDEX IF NOT EXISTS idx_tenant_signups_tenant_status ON tenant_signups(tenant_id, status);
|
|
CREATE INDEX IF NOT EXISTS idx_tenant_signups_user_email ON tenant_signups(user_email);
|
|
|
|
-- Initial admin tenant data
|
|
INSERT INTO tenants (id, name, subdomain, status, admin_user_id)
|
|
VALUES ('admin', 'Admin Tenant', 'admin', 'active', NULL)
|
|
ON CONFLICT (id) DO NOTHING;
|