gohorsejobs/backend/migrations/003_create_user_companies_table.sql

29 lines
1.2 KiB
SQL
Executable file

-- Migration: Create user_companies pivot table
-- Description: N:M relationship for multi-tenant - users can belong to multiple companies
CREATE TABLE IF NOT EXISTS user_companies (
id UUID PRIMARY KEY DEFAULT uuid_generate_v7(),
user_id UUID NOT NULL,
company_id UUID NOT NULL,
role VARCHAR(20) NOT NULL CHECK (role IN ('admin', 'recruiter')),
permissions JSONB, -- Optional granular permissions
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- Foreign keys
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
-- Ensure unique user-company pairs
UNIQUE(user_id, company_id)
);
-- Indexes for efficient lookups
CREATE INDEX idx_user_companies_user ON user_companies(user_id);
CREATE INDEX idx_user_companies_company ON user_companies(company_id);
CREATE INDEX idx_user_companies_role ON user_companies(role);
-- Comments
COMMENT ON TABLE user_companies IS 'Multi-tenant pivot: links users to companies with specific roles';
COMMENT ON COLUMN user_companies.role IS 'Role within this company: admin or recruiter';
COMMENT ON COLUMN user_companies.permissions IS 'Optional JSON object for granular permissions per company';