diff options
author | http://jneen.net/ <jneen@jneen.net> | 2016-09-02 09:36:13 -0700 |
---|---|---|
committer | http://jneen.net/ <jneen@jneen.net> | 2016-09-02 09:36:13 -0700 |
commit | 9fd75216118e8f75d144b631c260bbab6d0d5964 (patch) | |
tree | eb730b995a0b23b3bed185555922a5a9f6cdecb3 | |
parent | ff376ec66bac5907ca50e081991477cce09cb6c0 (diff) | |
download | gitlab-ce-feature/issue-locking.tar.gz |
first sketch of moderationsfeature/issue-locking
-rw-r--r-- | app/models/moderation.rb | 31 | ||||
-rw-r--r-- | db/migrate/20160824210739_add_moderations.rb | 45 |
2 files changed, 76 insertions, 0 deletions
diff --git a/app/models/moderation.rb b/app/models/moderation.rb new file mode 100644 index 00000000000..1be2e542ae3 --- /dev/null +++ b/app/models/moderation.rb @@ -0,0 +1,31 @@ +class Moderation < ActiveRecord::Base + belongs_to :project, class_name: 'Project' + belongs_to :reverted_by, class_name: 'Moderation' + belongs_to :moderator, class_name: 'User' + belongs_to :moderated, class_name: 'User' + belongs_to :subject, polymorphic: true + + REVERT = 0 + LOCK_ISSUE = 1 + + def self.active + now = Time.now + where(reverted_by: nil).where('ends_at > ?', Time.now) + end + + def self.for_project(project) + where(project: project) + end + + def revert! + reversion = Moderation.create do |m| + m.type = REVERT + m.subject = self + m.project = self.project + end + + self.update_attributes(reverted_by: reversion) + end + + +end diff --git a/db/migrate/20160824210739_add_moderations.rb b/db/migrate/20160824210739_add_moderations.rb new file mode 100644 index 00000000000..12086699a76 --- /dev/null +++ b/db/migrate/20160824210739_add_moderations.rb @@ -0,0 +1,45 @@ +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class AddModerations < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + # When a migration requires downtime you **must** uncomment the following + # constant and define a short and easy to understand explanation as to why the + # migration requires downtime. + # DOWNTIME_REASON = '' + + # When using the methods "add_concurrent_index" or "add_column_with_default" + # you must disable the use of transactions as these methods can not run in an + # existing transaction. When using "add_concurrent_index" make sure that this + # method is the _only_ method called in the migration, any other changes + # should go in a separate migration. This ensures that upon failure _only_ the + # index creation fails and can be retried or reverted easily. + # + # To disable transactions uncomment the following line and remove these + # comments: + # disable_ddl_transaction! + + def change + create_table :moderations do |t| + t.timestamps + t.integer :type, null: false + t.belongs_to :moderator, null: false + t.belongs_to :project, null: false + + t.belongs_to :reverted_by + + t.belongs_to :moderated + t.string :subject_type + t.belongs_to :subject + t.integer :ends_at + end + + add_index :moderations, [:project_id, :created_at, :ends_at] + add_index :moderations, [:moderator, :created_at] + add_index :moderations, [:subject_type, :subject_id] + end +end |