From 743c9b3af91db83353c8fd3011de6ea9ab8e3a41 Mon Sep 17 00:00:00 2001 From: Devin Howard Date: Wed, 28 Sep 2016 10:32:28 +0800 Subject: [PATCH] node{1,2}_id => topic{1,2}_id migration and code changes --- app/controllers/main_controller.rb | 4 ++-- app/controllers/synapses_controller.rb | 2 +- app/controllers/topics_controller.rb | 2 +- app/models/permitted_params.rb | 2 +- app/models/synapse.rb | 10 ++++---- app/models/topic.rb | 24 +++++++++---------- .../api/v2/application_serializer.rb | 9 ++++--- app/serializers/api/v2/synapse_serializer.rb | 4 ++-- app/services/map_export_service.rb | 4 ++-- ...ename_node1_id_to_topic1_id_in_synapses.rb | 6 +++++ db/schema.rb | 14 +++++------ frontend/src/Metamaps/Backbone/index.js | 8 +++---- frontend/src/Metamaps/Import.js | 4 ++-- frontend/src/Metamaps/JIT.js | 2 +- frontend/src/Metamaps/Map/index.js | 4 ++-- frontend/src/Metamaps/Synapse.js | 4 ++-- frontend/src/Metamaps/SynapseCard.js | 6 ++--- 17 files changed, 57 insertions(+), 52 deletions(-) create mode 100644 db/migrate/20160928022635_rename_node1_id_to_topic1_id_in_synapses.rb diff --git a/app/controllers/main_controller.rb b/app/controllers/main_controller.rb index 4624c7a6..0a5ccb68 100644 --- a/app/controllers/main_controller.rb +++ b/app/controllers/main_controller.rb @@ -156,8 +156,8 @@ class MainController < ApplicationController @synapses = @synapses.uniq(&:desc) elsif topic1id && !topic1id.empty? - @one = policy_scope(Synapse).where('node1_id = ? AND node2_id = ?', topic1id, topic2id) - @two = policy_scope(Synapse).where('node2_id = ? AND node1_id = ?', topic1id, topic2id) + @one = policy_scope(Synapse).where('topic1_id = ? AND topic2_id = ?', topic1id, topic2id) + @two = policy_scope(Synapse).where('topic2_id = ? AND topic1_id = ?', topic1id, topic2id) @synapses = @one + @two @synapses.sort! { |s1, s2| s1.desc <=> s2.desc }.to_a else diff --git a/app/controllers/synapses_controller.rb b/app/controllers/synapses_controller.rb index 8fc31688..e0b8f727 100644 --- a/app/controllers/synapses_controller.rb +++ b/app/controllers/synapses_controller.rb @@ -63,6 +63,6 @@ class SynapsesController < ApplicationController private def synapse_params - params.require(:synapse).permit(:id, :desc, :category, :weight, :permission, :node1_id, :node2_id, :user_id) + params.require(:synapse).permit(:id, :desc, :category, :weight, :permission, :topic1_id, :topic2_id, :user_id) end end diff --git a/app/controllers/topics_controller.rb b/app/controllers/topics_controller.rb index 1b966ca2..f909626a 100644 --- a/app/controllers/topics_controller.rb +++ b/app/controllers/topics_controller.rb @@ -96,7 +96,7 @@ class TopicsController < ApplicationController # find synapses between topics in alltopics array allsynapses = policy_scope(Synapse.for_topic(@topic.id)).to_a - synapse_ids = (allsynapses.map(&:node1_id) + allsynapses.map(&:node2_id)).uniq + synapse_ids = (allsynapses.map(&:topic1_id) + allsynapses.map(&:topic2_id)).uniq allsynapses.delete_if do |synapse| !synapse_ids.index(synapse.id).nil? end diff --git a/app/models/permitted_params.rb b/app/models/permitted_params.rb index d0696985..207854ac 100644 --- a/app/models/permitted_params.rb +++ b/app/models/permitted_params.rb @@ -19,7 +19,7 @@ class PermittedParams < Struct.new(:params) end def synapse_attributes - [:desc, :category, :weight, :permission, :node1_id, :node2_id] + [:desc, :category, :weight, :permission, :topic1_id, :topic2_id] end def topic_attributes diff --git a/app/models/synapse.rb b/app/models/synapse.rb index 798f6a54..37c9c72d 100644 --- a/app/models/synapse.rb +++ b/app/models/synapse.rb @@ -3,8 +3,8 @@ class Synapse < ApplicationRecord belongs_to :user belongs_to :defer_to_map, class_name: 'Map', foreign_key: 'defer_to_map_id' - belongs_to :topic1, class_name: 'Topic', foreign_key: 'node1_id' - belongs_to :topic2, class_name: 'Topic', foreign_key: 'node2_id' + belongs_to :topic1, class_name: 'Topic', foreign_key: 'topic1_id' + belongs_to :topic2, class_name: 'Topic', foreign_key: 'topic2_id' has_many :mappings, as: :mappable, dependent: :destroy has_many :maps, through: :mappings @@ -12,14 +12,14 @@ class Synapse < ApplicationRecord validates :desc, length: { minimum: 0, allow_nil: false } validates :permission, presence: true - validates :node1_id, presence: true - validates :node2_id, presence: true + validates :topic1_id, presence: true + validates :topic2_id, presence: true validates :permission, inclusion: { in: Perm::ISSIONS.map(&:to_s) } validates :category, inclusion: { in: ['from-to', 'both'], allow_nil: true } scope :for_topic, ->(topic_id = nil) { - where('node1_id = ? OR node2_id = ?', topic_id, topic_id) + where(topic1_id: topic_id).or(where(topic2_id: topic_id)) } delegate :name, to: :user, prefix: true diff --git a/app/models/topic.rb b/app/models/topic.rb index fb635da3..62f81cec 100644 --- a/app/models/topic.rb +++ b/app/models/topic.rb @@ -5,8 +5,8 @@ class Topic < ApplicationRecord belongs_to :user belongs_to :defer_to_map, class_name: 'Map', foreign_key: 'defer_to_map_id' - has_many :synapses1, class_name: 'Synapse', foreign_key: 'node1_id', dependent: :destroy - has_many :synapses2, class_name: 'Synapse', foreign_key: 'node2_id', dependent: :destroy + has_many :synapses1, class_name: 'Synapse', foreign_key: 'topic1_id', dependent: :destroy + has_many :synapses2, class_name: 'Synapse', foreign_key: 'topic2_id', dependent: :destroy has_many :topics1, through: :synapses2, source: :topic1 has_many :topics2, through: :synapses1, source: :topic2 @@ -46,8 +46,8 @@ class Topic < ApplicationRecord scope :relatives, ->(topic_id = nil, user = nil) { # should only see topics through *visible* synapses # e.g. Topic A (commons) -> synapse (private) -> Topic B (commons) must be filtered out - synapses = Pundit.policy_scope(user, Synapse.where(node1_id: topic_id)).pluck(:node2_id) - synapses += Pundit.policy_scope(user, Synapse.where(node2_id: topic_id)).pluck(:node1_id) + synapses = Pundit.policy_scope(user, Synapse.where(topic1_id: topic_id)).pluck(:topic2_id) + synapses += Pundit.policy_scope(user, Synapse.where(topic2_id: topic_id)).pluck(:topic1_id) where(id: synapses.uniq) } @@ -94,18 +94,18 @@ class Topic < ApplicationRecord output = [] synapses.each do |synapse| if synapse.category == 'from-to' - if synapse.node1_id == id - output << synapse.node1_id.to_s + '->' + synapse.node2_id.to_s - elsif synapse.node2_id == id - output << synapse.node2_id.to_s + '<-' + synapse.node1_id.to_s + if synapse.topic1_id == id + output << synapse.topic1_id.to_s + '->' + synapse.topic2_id.to_s + elsif synapse.topic2_id == id + output << synapse.topic2_id.to_s + '<-' + synapse.topic1_id.to_s else raise 'invalid synapse on topic in synapse_csv' end elsif synapse.category == 'both' - if synapse.node1_id == id - output << synapse.node1_id.to_s + '<->' + synapse.node2_id.to_s - elsif synapse.node2_id == id - output << synapse.node2_id.to_s + '<->' + synapse.node1_id.to_s + if synapse.topic1_id == id + output << synapse.topic1_id.to_s + '<->' + synapse.topic2_id.to_s + elsif synapse.topic2_id == id + output << synapse.topic2_id.to_s + '<->' + synapse.topic1_id.to_s else raise 'invalid synapse on topic in synapse_csv' end diff --git a/app/serializers/api/v2/application_serializer.rb b/app/serializers/api/v2/application_serializer.rb index a5da830a..2d7c1b9a 100644 --- a/app/serializers/api/v2/application_serializer.rb +++ b/app/serializers/api/v2/application_serializer.rb @@ -14,8 +14,7 @@ module Api end # self.embeddable might look like this: - # topic1: { attr: :node1, serializer: TopicSerializer } - # topic2: { attr: :node2, serializer: TopicSerializer } + # creator: { attr: :first_creator, serializer: UserSerializer } # contributors: { serializer: UserSerializer} # This method will remove the :attr key if the underlying attribute name # is different than the name provided in the final json output. All other keys @@ -24,9 +23,9 @@ module Api # # This setup means if you passed this self.embeddable config and sent no # ?embed= query param with your API request, you would get the regular attributes - # plus topic1_id, topic2_id, and contributor_ids. If you pass - # ?embed=topic1,topic2,contributors, then instead of two ids and an array of ids, - # you would get two serialized topics and an array of serialized users + # plus creator_id and contributor_ids. If you passed ?embed=creator,contributors + # then instead of an id and an array of ids, you would get a serialized user + # (the first_creator) and an array of serialized users (the contributors). def self.embed_dat embeddable.each_pair do |key, opts| attr = opts.delete(:attr) || key diff --git a/app/serializers/api/v2/synapse_serializer.rb b/app/serializers/api/v2/synapse_serializer.rb index f647022c..3f95af35 100644 --- a/app/serializers/api/v2/synapse_serializer.rb +++ b/app/serializers/api/v2/synapse_serializer.rb @@ -11,8 +11,8 @@ module Api def self.embeddable { - topic1: { attr: :node1, serializer: TopicSerializer }, - topic2: { attr: :node2, serializer: TopicSerializer }, + topic1: { serializer: TopicSerializer }, + topic2: { serializer: TopicSerializer }, user: {} } end diff --git a/app/services/map_export_service.rb b/app/services/map_export_service.rb index 2ded756c..6a89a15d 100644 --- a/app/services/map_export_service.rb +++ b/app/services/map_export_service.rb @@ -62,8 +62,8 @@ class MapExportService visible_synapses.map do |synapse| next nil if synapse.nil? OpenStruct.new( - topic1: synapse.node1_id, - topic2: synapse.node2_id, + topic1: synapse.topic1_id, + topic2: synapse.topic2_id, category: synapse.category, description: synapse.desc, user: synapse.user.name, diff --git a/db/migrate/20160928022635_rename_node1_id_to_topic1_id_in_synapses.rb b/db/migrate/20160928022635_rename_node1_id_to_topic1_id_in_synapses.rb new file mode 100644 index 00000000..fc5b4a1b --- /dev/null +++ b/db/migrate/20160928022635_rename_node1_id_to_topic1_id_in_synapses.rb @@ -0,0 +1,6 @@ +class RenameNode1IdToTopic1IdInSynapses < ActiveRecord::Migration[5.0] + def change + rename_column :synapses, :node1_id, :topic1_id + rename_column :synapses, :node2_id, :topic2_id + end +end diff --git a/db/schema.rb b/db/schema.rb index ea06b679..0bfa7f1a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160820231717) do +ActiveRecord::Schema.define(version: 20160928022635) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -175,16 +175,16 @@ ActiveRecord::Schema.define(version: 20160820231717) do t.text "category" t.text "weight" t.text "permission" - t.integer "node1_id" - t.integer "node2_id" + t.integer "topic1_id" + t.integer "topic2_id" t.integer "user_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "defer_to_map_id" - t.index ["node1_id", "node1_id"], name: "index_synapses_on_node1_id_and_node1_id", using: :btree - t.index ["node1_id"], name: "index_synapses_on_node1_id", using: :btree - t.index ["node2_id", "node2_id"], name: "index_synapses_on_node2_id_and_node2_id", using: :btree - t.index ["node2_id"], name: "index_synapses_on_node2_id", using: :btree + t.index ["topic1_id", "topic1_id"], name: "index_synapses_on_node1_id_and_node1_id", using: :btree + t.index ["topic1_id"], name: "index_synapses_on_topic1_id", using: :btree + t.index ["topic2_id", "topic2_id"], name: "index_synapses_on_node2_id_and_node2_id", using: :btree + t.index ["topic2_id"], name: "index_synapses_on_topic2_id", using: :btree t.index ["user_id"], name: "index_synapses_on_user_id", using: :btree end diff --git a/frontend/src/Metamaps/Backbone/index.js b/frontend/src/Metamaps/Backbone/index.js index b1ba9e78..1994c483 100644 --- a/frontend/src/Metamaps/Backbone/index.js +++ b/frontend/src/Metamaps/Backbone/index.js @@ -531,10 +531,10 @@ _Backbone.init = function () { else return false }, getTopic1: function () { - return Metamaps.Topics.get(this.get('node1_id')) + return Metamaps.Topics.get(this.get('topic1_id')) }, getTopic2: function () { - return Metamaps.Topics.get(this.get('node2_id')) + return Metamaps.Topics.get(this.get('topic2_id')) }, getDirection: function () { var t1 = this.getTopic1(), @@ -559,8 +559,8 @@ _Backbone.init = function () { var synapseID = this.isNew() ? this.cid : this.id var edge = { - nodeFrom: this.get('node1_id'), - nodeTo: this.get('node2_id'), + nodeFrom: this.get('topic1_id'), + nodeTo: this.get('topic2_id'), data: { $synapses: [], $synapseIDs: [synapseID], diff --git a/frontend/src/Metamaps/Import.js b/frontend/src/Metamaps/Import.js index 52a8f21a..193cdf5e 100644 --- a/frontend/src/Metamaps/Import.js +++ b/frontend/src/Metamaps/Import.js @@ -333,8 +333,8 @@ const Import = { desc: desc || "", category: category, permission: permission, - node1_id: topic1.id, - node2_id: topic2.id + topic1_id: topic1.id, + topic2_id: topic2.id }) Metamaps.Synapses.add(synapse) diff --git a/frontend/src/Metamaps/JIT.js b/frontend/src/Metamaps/JIT.js index 63723dbd..4a665bdc 100644 --- a/frontend/src/Metamaps/JIT.js +++ b/frontend/src/Metamaps/JIT.js @@ -93,7 +93,7 @@ const JIT = { synapses.each(function (s) { edge = s.createEdge() - if (topics.get(s.get('node1_id')) === undefined || topics.get(s.get('node2_id')) === undefined) { + if (topics.get(s.get('topic1_id')) === undefined || topics.get(s.get('topic2_id')) === undefined) { // this means it's an invalid synapse synapsesToRemove.push(s) } diff --git a/frontend/src/Metamaps/Map/index.js b/frontend/src/Metamaps/Map/index.js index 944a387b..625a549e 100644 --- a/frontend/src/Metamaps/Map/index.js +++ b/frontend/src/Metamaps/Map/index.js @@ -200,8 +200,8 @@ const Map = { var descNotFiltered = Filter.visible.synapses.indexOf(desc) > -1 // make sure that both topics are being added, otherwise, it // doesn't make sense to add the synapse - var topicsNotFiltered = nodes_array.indexOf(synapse.get('node1_id')) > -1 - topicsNotFiltered = topicsNotFiltered && nodes_array.indexOf(synapse.get('node2_id')) > -1 + var topicsNotFiltered = nodes_array.indexOf(synapse.get('topic1_id')) > -1 + topicsNotFiltered = topicsNotFiltered && nodes_array.indexOf(synapse.get('topic2_id')) > -1 if (descNotFiltered && topicsNotFiltered) { synapses_array.push(synapse.id) } diff --git a/frontend/src/Metamaps/Synapse.js b/frontend/src/Metamaps/Synapse.js index b50e50e6..400cb0b0 100644 --- a/frontend/src/Metamaps/Synapse.js +++ b/frontend/src/Metamaps/Synapse.js @@ -128,8 +128,8 @@ const Synapse = { topic1 = node1.getData('topic') synapse = new Metamaps.Backbone.Synapse({ desc: Create.newSynapse.description, - node1_id: topic1.isNew() ? topic1.cid : topic1.id, - node2_id: topic2.isNew() ? topic2.cid : topic2.id, + topic1_id: topic1.isNew() ? topic1.cid : topic1.id, + topic2_id: topic2.isNew() ? topic2.cid : topic2.id, }) Metamaps.Synapses.add(synapse) diff --git a/frontend/src/Metamaps/SynapseCard.js b/frontend/src/Metamaps/SynapseCard.js index 28ff1e32..8203657d 100644 --- a/frontend/src/Metamaps/SynapseCard.js +++ b/frontend/src/Metamaps/SynapseCard.js @@ -238,7 +238,7 @@ const SynapseCard = { var directionCat = synapse.get('category'); // both, none, from-to if (directionCat == 'from-to') { - var from_to = [synapse.get('node1_id'), synapse.get('node2_id')] + var from_to = [synapse.get('topic1_id'), synapse.get('topic2_id')] if (from_to[0] == left.id) { // check left checkbox $('#edit_synapse_left').addClass('checked') @@ -273,8 +273,8 @@ const SynapseCard = { synapse.save({ category: dirCat, - node1_id: dir[0], - node2_id: dir[1] + topic1_id: dir[0], + topic2_id: dir[1] }) Visualize.mGraph.plot() })