summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhttp://jneen.net/ <jneen@jneen.net>2016-09-02 09:36:13 -0700
committerhttp://jneen.net/ <jneen@jneen.net>2016-09-02 09:36:13 -0700
commit9fd75216118e8f75d144b631c260bbab6d0d5964 (patch)
treeeb730b995a0b23b3bed185555922a5a9f6cdecb3
parentff376ec66bac5907ca50e081991477cce09cb6c0 (diff)
downloadgitlab-ce-feature/issue-locking.tar.gz
first sketch of moderationsfeature/issue-locking
-rw-r--r--app/models/moderation.rb31
-rw-r--r--db/migrate/20160824210739_add_moderations.rb45
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