summaryrefslogtreecommitdiff
path: root/db/migrate/20210721135638_add_triggers_to_integrations_type_new.rb
blob: 6b1f2aeba188ae70497675ad1790d25f12c7369c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# frozen_string_literal: true

class AddTriggersToIntegrationsTypeNew < ActiveRecord::Migration[6.1]
  include Gitlab::Database::SchemaHelpers

  FUNCTION_NAME = 'integrations_set_type_new'
  TRIGGER_ON_INSERT_NAME = 'trigger_type_new_on_insert'

  def up
    create_trigger_function(FUNCTION_NAME, replace: true) do
      # This list matches `Gitlab::Integrations::StiType::NAMESPACED_INTEGRATIONS`.
      #
      # If we add new integrations after this migration we can directly use the
      # correct class name in `type`, and don't need to add it to `NAMESPACED_INTEGRATIONS`.
      <<~SQL
        WITH mapping(old_type, new_type) AS (VALUES
          ('AsanaService',                   'Integrations::Asana'),
          ('AssemblaService',                'Integrations::Assembla'),
          ('BambooService',                  'Integrations::Bamboo'),
          ('BugzillaService',                'Integrations::Bugzilla'),
          ('BuildkiteService',               'Integrations::Buildkite'),
          ('CampfireService',                'Integrations::Campfire'),
          ('ConfluenceService',              'Integrations::Confluence'),
          ('CustomIssueTrackerService',      'Integrations::CustomIssueTracker'),
          ('DatadogService',                 'Integrations::Datadog'),
          ('DiscordService',                 'Integrations::Discord'),
          ('DroneCiService',                 'Integrations::DroneCi'),
          ('EmailsOnPushService',            'Integrations::EmailsOnPush'),
          ('EwmService',                     'Integrations::Ewm'),
          ('ExternalWikiService',            'Integrations::ExternalWiki'),
          ('FlowdockService',                'Integrations::Flowdock'),
          ('HangoutsChatService',            'Integrations::HangoutsChat'),
          ('IrkerService',                   'Integrations::Irker'),
          ('JenkinsService',                 'Integrations::Jenkins'),
          ('JiraService',                    'Integrations::Jira'),
          ('MattermostService',              'Integrations::Mattermost'),
          ('MattermostSlashCommandsService', 'Integrations::MattermostSlashCommands'),
          ('MicrosoftTeamsService',          'Integrations::MicrosoftTeams'),
          ('MockCiService',                  'Integrations::MockCi'),
          ('MockMonitoringService',          'Integrations::MockMonitoring'),
          ('PackagistService',               'Integrations::Packagist'),
          ('PipelinesEmailService',          'Integrations::PipelinesEmail'),
          ('PivotaltrackerService',          'Integrations::Pivotaltracker'),
          ('PrometheusService',              'Integrations::Prometheus'),
          ('PushoverService',                'Integrations::Pushover'),
          ('RedmineService',                 'Integrations::Redmine'),
          ('SlackService',                   'Integrations::Slack'),
          ('SlackSlashCommandsService',      'Integrations::SlackSlashCommands'),
          ('TeamcityService',                'Integrations::Teamcity'),
          ('UnifyCircuitService',            'Integrations::UnifyCircuit'),
          ('YoutrackService',                'Integrations::Youtrack'),
          ('WebexTeamsService',              'Integrations::WebexTeams'),

          -- EE-only integrations
          ('GithubService',                  'Integrations::Github'),
          ('GitlabSlackApplicationService',  'Integrations::GitlabSlackApplication')
        )

        UPDATE integrations SET type_new = mapping.new_type
        FROM mapping
        WHERE integrations.id = NEW.id
          AND mapping.old_type = NEW.type;
        RETURN NULL;
      SQL
    end

    execute(<<~SQL)
      CREATE TRIGGER #{TRIGGER_ON_INSERT_NAME}
      AFTER INSERT ON integrations
      FOR EACH ROW
      EXECUTE FUNCTION #{FUNCTION_NAME}();
    SQL
  end

  def down
    drop_trigger(:integrations, TRIGGER_ON_INSERT_NAME)
    drop_function(FUNCTION_NAME)
  end
end