Migración desde workspace-v2/projects/template-saas/apps/database Este repositorio es parte del estándar multi-repo v2 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
54 lines
1.8 KiB
SQL
54 lines
1.8 KiB
SQL
-- ============================================
|
|
-- TEMPLATE-SAAS: Tenant Settings Table
|
|
-- Schema: tenants
|
|
-- Version: 1.0.0
|
|
-- ============================================
|
|
|
|
-- For structured settings that need to be queried
|
|
CREATE TABLE tenants.tenant_settings (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
tenant_id UUID NOT NULL REFERENCES tenants.tenants(id) ON DELETE CASCADE,
|
|
|
|
-- Setting identification
|
|
category VARCHAR(100) NOT NULL, -- 'general', 'billing', 'notifications', 'security'
|
|
key VARCHAR(100) NOT NULL,
|
|
|
|
-- Value (supports different types)
|
|
value_string VARCHAR(1000),
|
|
value_number DECIMAL(20, 4),
|
|
value_boolean BOOLEAN,
|
|
value_json JSONB,
|
|
|
|
-- Metadata
|
|
description TEXT,
|
|
is_sensitive BOOLEAN DEFAULT FALSE, -- For encryption at rest
|
|
|
|
-- Audit
|
|
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
updated_by UUID,
|
|
|
|
-- Constraints
|
|
CONSTRAINT unique_tenant_setting UNIQUE (tenant_id, category, key)
|
|
);
|
|
|
|
-- Indexes
|
|
CREATE INDEX idx_tenant_settings_tenant ON tenants.tenant_settings(tenant_id);
|
|
CREATE INDEX idx_tenant_settings_category ON tenants.tenant_settings(tenant_id, category);
|
|
|
|
-- RLS
|
|
ALTER TABLE tenants.tenant_settings ENABLE ROW LEVEL SECURITY;
|
|
|
|
CREATE POLICY tenant_settings_isolation ON tenants.tenant_settings
|
|
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
|
|
|
-- Trigger for updated_at
|
|
CREATE TRIGGER trg_tenant_settings_updated_at
|
|
BEFORE UPDATE ON tenants.tenant_settings
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION tenants.update_updated_at();
|
|
|
|
-- Comments
|
|
COMMENT ON TABLE tenants.tenant_settings IS 'Structured tenant settings for queryable configuration';
|
|
COMMENT ON COLUMN tenants.tenant_settings.is_sensitive IS 'Flag for values that should be encrypted at rest';
|