-- Migration 019: Opportunity comment attachments -- Captures uploaded files that belong to a pipeline comment thread CREATE TABLE IF NOT EXISTS pipeline_opportunity_comment_attachments ( id SERIAL PRIMARY KEY, opportunity_id INTEGER NOT NULL REFERENCES pipeline_opportunities(id) ON DELETE CASCADE, comment_id INTEGER NOT NULL REFERENCES pipeline_opportunity_comments(id) ON DELETE CASCADE, filename VARCHAR(255) NOT NULL, content_type VARCHAR(100), size_bytes INTEGER, stored_name TEXT NOT NULL, uploaded_by_user_id INTEGER, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (uploaded_by_user_id) REFERENCES users(user_id) ON DELETE SET NULL ); CREATE INDEX IF NOT EXISTS idx_pipeline_comment_attachments_comment_id ON pipeline_opportunity_comment_attachments(comment_id); CREATE INDEX IF NOT EXISTS idx_pipeline_comment_attachments_opportunity_id ON pipeline_opportunity_comment_attachments(opportunity_id); COMMENT ON TABLE pipeline_opportunity_comment_attachments IS 'User uploaded files stored alongside pipeline opportunity comments';