Convert issue status to an enum
authorAndy Allan <git@gravitystorm.co.uk>
Wed, 21 Mar 2018 04:05:08 +0000 (12:05 +0800)
committerAndy Allan <git@gravitystorm.co.uk>
Wed, 21 Mar 2018 04:05:08 +0000 (12:05 +0800)
app/models/issue.rb
db/migrate/20160822153055_create_issues_and_reports.rb
db/structure.sql

index c02254a..27c0a7c 100644 (file)
@@ -6,7 +6,7 @@
 #  reportable_type  :string           not null
 #  reportable_id    :integer          not null
 #  reported_user_id :integer
-#  status           :integer
+#  status           :enum             default(NULL), not null
 #  assigned_role    :enum             not null
 #  resolved_at      :datetime
 #  resolved_by      :integer
@@ -45,9 +45,6 @@ class Issue < ActiveRecord::Base
   before_validation :set_default_assigned_role
   before_validation :set_reported_user
 
-  # Check if more statuses are needed
-  enum :status => %w[open ignored resolved]
-
   scope :with_status, ->(issue_status) { where(:status => statuses[issue_status]) }
 
   def read_reports
index aa308ef..b03ac24 100644 (file)
@@ -1,10 +1,14 @@
+require "migrate"
+
 class CreateIssuesAndReports < ActiveRecord::Migration[5.0]
-  def change
+  def up
+    create_enumeration :issue_status_enum, %w[open ignored resolved]
+
     create_table :issues do |t|
       t.string :reportable_type, :null => false
       t.integer :reportable_id, :null => false
       t.integer :reported_user_id
-      t.integer :status
+      t.column :status, :issue_status_enum, :null => false, :default => "open"
       t.column :assigned_role, :user_role_enum, :null => false
       t.datetime :resolved_at
       t.integer :resolved_by
@@ -48,4 +52,11 @@ class CreateIssuesAndReports < ActiveRecord::Migration[5.0]
     add_index :issue_comments, :user_id
     add_index :issue_comments, :issue_id
   end
+
+  def down
+    drop_table :issue_comments
+    drop_table :reports
+    drop_table :issues
+    drop_enumeration :issue_status_enum
+  end
 end
index 14e6592..73cb543 100644 (file)
@@ -66,6 +66,17 @@ CREATE TYPE gpx_visibility_enum AS ENUM (
 );
 
 
+--
+-- Name: issue_status_enum; Type: TYPE; Schema: public; Owner: -
+--
+
+CREATE TYPE issue_status_enum AS ENUM (
+    'open',
+    'ignored',
+    'resolved'
+);
+
+
 --
 -- Name: note_event_enum; Type: TYPE; Schema: public; Owner: -
 --
@@ -727,7 +738,7 @@ CREATE TABLE issues (
     reportable_type character varying NOT NULL,
     reportable_id integer NOT NULL,
     reported_user_id integer,
-    status integer,
+    status issue_status_enum DEFAULT 'open'::public.issue_status_enum NOT NULL,
     assigned_role user_role_enum NOT NULL,
     resolved_at timestamp without time zone,
     resolved_by integer,