From ee1a8637d3e97575135b3a022605e0b831c8b232 Mon Sep 17 00:00:00 2001 From: Andy Allan Date: Wed, 21 Mar 2018 12:05:08 +0800 Subject: [PATCH] Convert issue status to an enum --- app/models/issue.rb | 5 +---- .../20160822153055_create_issues_and_reports.rb | 15 +++++++++++++-- db/structure.sql | 13 ++++++++++++- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/app/models/issue.rb b/app/models/issue.rb index c02254a1b..27c0a7cc9 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -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 diff --git a/db/migrate/20160822153055_create_issues_and_reports.rb b/db/migrate/20160822153055_create_issues_and_reports.rb index aa308ef68..b03ac24a8 100644 --- a/db/migrate/20160822153055_create_issues_and_reports.rb +++ b/db/migrate/20160822153055_create_issues_and_reports.rb @@ -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 diff --git a/db/structure.sql b/db/structure.sql index 14e6592fc..73cb543e7 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -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, -- 2.43.2