49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
"""phase33 — tenant_settings table for per-tenant branding (MT-7)
|
|
|
|
Adds a single-row-per-tenant settings store in the tenant database.
|
|
Tenant-zero starts with defaults (no visual change until admin edits them).
|
|
|
|
Revision: phase33_tenant_settings
|
|
Down: phase32_device_token_columns
|
|
"""
|
|
|
|
revision = 'phase33_tenant_settings'
|
|
down_revision = 'phase32_device_token_columns'
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
import sqlalchemy as sa
|
|
from alembic import op
|
|
|
|
|
|
def _table_exists(bind, table_name):
|
|
result = bind.execute(sa.text(
|
|
"SELECT COUNT(*) FROM information_schema.tables "
|
|
"WHERE table_schema = DATABASE() AND table_name = :t"
|
|
), {'t': table_name})
|
|
return result.scalar() > 0
|
|
|
|
|
|
def upgrade():
|
|
bind = op.get_bind()
|
|
if not _table_exists(bind, 'tenant_settings'):
|
|
op.execute(sa.text("""
|
|
CREATE TABLE tenant_settings (
|
|
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
company_name VARCHAR(150) NULL,
|
|
logo_url VARCHAR(500) NULL,
|
|
primary_color VARCHAR(7) NOT NULL DEFAULT '#1a56db',
|
|
accent_color VARCHAR(7) NOT NULL DEFAULT '#16a34a',
|
|
support_email VARCHAR(255) NULL,
|
|
updated_at DATETIME NOT NULL,
|
|
updated_by INT NULL,
|
|
CONSTRAINT fk_tenant_settings_user
|
|
FOREIGN KEY (updated_by) REFERENCES users(id) ON DELETE SET NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
|
"""))
|
|
|
|
|
|
def downgrade():
|
|
bind = op.get_bind()
|
|
if _table_exists(bind, 'tenant_settings'):
|
|
op.execute(sa.text('DROP TABLE tenant_settings')) |