gohorsejobs/backend/migrations/003_create_user_companies_table.sql
Tiago Yamamoto 1c7ef95c1a first commit
2025-12-09 19:04:48 -03:00

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 SERIAL PRIMARY KEY,
user_id INT NOT NULL,
company_id INT 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';