23 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			23 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
class CreateVulnerabilityIssueLinks < ActiveRecord::Migration[5.2]
 | 
						|
  DOWNTIME = false
 | 
						|
 | 
						|
  def change
 | 
						|
    create_table :vulnerability_issue_links do |t|
 | 
						|
      # index: false because idx_vulnerability_issue_links_on_vulnerability_id_and_issue_id refers the same column
 | 
						|
      t.references :vulnerability, null: false, index: false, foreign_key: { on_delete: :cascade }
 | 
						|
      # index: true is implied
 | 
						|
      t.references :issue, null: false, foreign_key: { on_delete: :cascade }
 | 
						|
      t.integer 'link_type', limit: 2, null: false, default: 1 # 'related'
 | 
						|
      t.index %i[vulnerability_id issue_id],
 | 
						|
              name: 'idx_vulnerability_issue_links_on_vulnerability_id_and_issue_id',
 | 
						|
              unique: true # only one link (and of only one type) is allowed
 | 
						|
      t.index %i[vulnerability_id link_type],
 | 
						|
              name: 'idx_vulnerability_issue_links_on_vulnerability_id_and_link_type',
 | 
						|
              where: 'link_type = 2',
 | 
						|
              unique: true # only one 'created' link per vulnerability is allowed
 | 
						|
      t.timestamps_with_timezone
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |