From 065b0ed3c8746e3193ee2ddc3f8192259db6514c Mon Sep 17 00:00:00 2001 From: Bertocq Date: Wed, 20 Dec 2017 01:36:35 +0100 Subject: [PATCH] Create Related Content Scores --- app/models/related_content.rb | 5 +++-- app/models/related_content_score.rb | 6 ++++++ db/dev_seeds.rb | 2 +- ...0171219184209_create_related_content_scores.rb | 11 +++++++++++ ...d_content_scores_counter_to_related_content.rb | 5 +++++ db/schema.rb | 15 ++++++++++++++- db/seeds.rb | 2 +- 7 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 app/models/related_content_score.rb create mode 100644 db/migrate/20171219184209_create_related_content_scores.rb create mode 100644 db/migrate/20171220002802_add_related_content_scores_counter_to_related_content.rb diff --git a/app/models/related_content.rb b/app/models/related_content.rb index 699a96654..bc4db358a 100644 --- a/app/models/related_content.rb +++ b/app/models/related_content.rb @@ -1,10 +1,11 @@ class RelatedContent < ActiveRecord::Base - RELATED_CONTENTS_REPORT_THRESHOLD = Setting['related_contents_report_threshold'].to_f + RELATED_CONTENT_SCORE_THRESHOLD = Setting['related_content_score_threshold'].to_f RELATIONABLE_MODELS = %w{proposals debates}.freeze belongs_to :parent_relationable, polymorphic: true, touch: true belongs_to :child_relationable, polymorphic: true, touch: true has_one :opposite_related_content, class_name: 'RelatedContent', foreign_key: :related_content_id + has_many :related_content_scores validates :parent_relationable_id, presence: true validates :parent_relationable_type, presence: true @@ -14,7 +15,7 @@ class RelatedContent < ActiveRecord::Base after_create :create_opposite_related_content, unless: proc { opposite_related_content.present? } - scope :not_hidden, -> { where('positive_score - negative_score / LEAST(nullif(positive_score + negative_score, 0), 1) >= ?', RELATED_CONTENTS_REPORT_THRESHOLD) } + scope :not_hidden, -> { where('positive_score - negative_score / LEAST(nullif(positive_score + negative_score, 0), 1) >= ?', RELATED_CONTENT_SCORE_THRESHOLD) } private diff --git a/app/models/related_content_score.rb b/app/models/related_content_score.rb new file mode 100644 index 000000000..6be6a0388 --- /dev/null +++ b/app/models/related_content_score.rb @@ -0,0 +1,6 @@ +class RelatedContentScore < ActiveRecord::Base + belongs_to :related_content, touch: true, counter_cache: :related_content_scores_count + + validates :user_id, presence: true + validates :related_content_id, presence: true +end diff --git a/db/dev_seeds.rb b/db/dev_seeds.rb index 1e9d87b99..d85c34c56 100644 --- a/db/dev_seeds.rb +++ b/db/dev_seeds.rb @@ -67,7 +67,7 @@ section "Creating Settings" do Setting.create(key: 'map_latitude', value: 51.48) Setting.create(key: 'map_longitude', value: 0.0) Setting.create(key: 'map_zoom', value: 10) - Setting.create(key: 'related_contents_report_threshold', value: -0.3) + Setting.create(key: 'related_content_score_threshold', value: -0.3) end section "Creating Geozones" do diff --git a/db/migrate/20171219184209_create_related_content_scores.rb b/db/migrate/20171219184209_create_related_content_scores.rb new file mode 100644 index 000000000..7a54ba56d --- /dev/null +++ b/db/migrate/20171219184209_create_related_content_scores.rb @@ -0,0 +1,11 @@ +class CreateRelatedContentScores < ActiveRecord::Migration + def change + create_table :related_content_scores do |t| + t.references :user, index: true, foreign_key: true + t.references :related_content, index: true, foreign_key: true + t.integer :value + end + + add_index :related_content_scores, [:user_id, :related_content_id], name: "unique_user_related_content_scoring", unique: true, using: :btree + end +end diff --git a/db/migrate/20171220002802_add_related_content_scores_counter_to_related_content.rb b/db/migrate/20171220002802_add_related_content_scores_counter_to_related_content.rb new file mode 100644 index 000000000..497d4f7a1 --- /dev/null +++ b/db/migrate/20171220002802_add_related_content_scores_counter_to_related_content.rb @@ -0,0 +1,5 @@ +class AddRelatedContentScoresCounterToRelatedContent < ActiveRecord::Migration + def change + add_column :related_contents, :related_content_scores_count, :integer, default: 0 + end +end diff --git a/db/schema.rb b/db/schema.rb index c35ded4a4..c0432897f 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20171219111046) do +ActiveRecord::Schema.define(version: 20171220002802) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -854,6 +854,16 @@ ActiveRecord::Schema.define(version: 20171219111046) do add_index "proposals", ["title"], name: "index_proposals_on_title", using: :btree add_index "proposals", ["tsv"], name: "index_proposals_on_tsv", using: :gin + create_table "related_content_scores", force: :cascade do |t| + t.integer "user_id" + t.integer "related_content_id" + t.integer "value" + end + + add_index "related_content_scores", ["related_content_id"], name: "index_related_content_scores_on_related_content_id", using: :btree + add_index "related_content_scores", ["user_id", "related_content_id"], name: "unique_user_related_content_scoring", unique: true, using: :btree + add_index "related_content_scores", ["user_id"], name: "index_related_content_scores_on_user_id", using: :btree + create_table "related_contents", force: :cascade do |t| t.integer "parent_relationable_id" t.string "parent_relationable_type" @@ -862,6 +872,7 @@ ActiveRecord::Schema.define(version: 20171219111046) do t.integer "related_content_id" t.datetime "created_at" t.datetime "updated_at" + t.integer "related_content_scores_count", default: 0 end add_index "related_contents", ["child_relationable_type", "child_relationable_id"], name: "index_related_contents_on_child_relationable", using: :btree @@ -1188,6 +1199,8 @@ ActiveRecord::Schema.define(version: 20171219111046) do add_foreign_key "poll_recounts", "poll_officer_assignments", column: "officer_assignment_id" add_foreign_key "poll_voters", "polls" add_foreign_key "proposals", "communities" + add_foreign_key "related_content_scores", "related_contents" + add_foreign_key "related_content_scores", "users" add_foreign_key "users", "geozones" add_foreign_key "valuators", "users" end diff --git a/db/seeds.rb b/db/seeds.rb index 6c4ad5c20..529aaa925 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -120,4 +120,4 @@ Setting['map_longitude'] = 0.0 Setting['map_zoom'] = 10 # Related content -Setting['related_contents_report_threshold'] = -0.3 +Setting['related_content_score_threshold'] = -0.3