wulf-pulse/migrations/065_create_company_teams_table.sql

43 lines
1.8 KiB
MySQL
Raw Permalink Normal View History

-- Migration 065: Create company_teams table and add primary/billing contact FKs to companies
-- Company Teams: maps resources (TAMs, CSMs, etc.) to companies
CREATE TABLE IF NOT EXISTS company_teams (
id BIGINT PRIMARY KEY,
company_id BIGINT REFERENCES companies(id) ON DELETE CASCADE,
resource_id BIGINT,
is_associated_as_comanaged BOOLEAN DEFAULT false,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
synced_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_deleted BOOLEAN DEFAULT false,
deleted_at TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_company_teams_company_id ON company_teams(company_id);
CREATE INDEX IF NOT EXISTS idx_company_teams_resource_id ON company_teams(resource_id);
-- Add primary and billing contact FK columns to companies
ALTER TABLE companies
ADD COLUMN IF NOT EXISTS primary_contact_id BIGINT REFERENCES contacts(id) ON DELETE SET NULL,
ADD COLUMN IF NOT EXISTS billing_contact_id BIGINT REFERENCES contacts(id) ON DELETE SET NULL;
CREATE INDEX IF NOT EXISTS idx_companies_primary_contact ON companies(primary_contact_id) WHERE primary_contact_id IS NOT NULL;
CREATE INDEX IF NOT EXISTS idx_companies_billing_contact ON companies(billing_contact_id) WHERE billing_contact_id IS NOT NULL;
-- Backfill from existing contacts data
UPDATE companies c
SET primary_contact_id = (
SELECT id FROM contacts
WHERE company_id = c.id AND primary_contact = true AND is_deleted = false
ORDER BY id LIMIT 1
)
WHERE primary_contact_id IS NULL;
UPDATE companies c
SET billing_contact_id = (
SELECT id FROM contacts
WHERE company_id = c.id AND billing_contact = true AND is_deleted = false
ORDER BY id LIMIT 1
)
WHERE billing_contact_id IS NULL;