-- Migration 020: Opportunity contract files -- Stores documents that belong to the offer/contract card and can be downloaded independently of comments CREATE TABLE IF NOT EXISTS pipeline_opportunity_contract_files ( id SERIAL PRIMARY KEY, opportunity_id INTEGER NOT NULL REFERENCES pipeline_opportunities(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_opportunity_contract_files_opportunity_id ON pipeline_opportunity_contract_files(opportunity_id); COMMENT ON TABLE pipeline_opportunity_contract_files IS 'Files uploaded directly to the opportunity (Tilbud & Kontrakt) card.';