29 lines
1.3 KiB
SQL
Executable file
29 lines
1.3 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 ('companyAdmin', '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: companyAdmin or recruiter';
|
|
COMMENT ON COLUMN user_companies.permissions IS 'Optional JSON object for granular permissions per company';
|