diff --git a/models/pool_version.rb b/models/pool_version.rb index b4f5210..43c324d 100644 --- a/models/pool_version.rb +++ b/models/pool_version.rb @@ -13,11 +13,13 @@ class PoolVersion < ActiveRecord::Base pool: 5 ) - def self.find_previous(pool_id, updated_at) - PoolVersion.where(pool_id: pool_id).where("updated_at < ?", updated_at).order("id desc").first + def self.find_previous(pool_id, version = nil) + scope = where(pool_id: pool_id) + scope = scope.where("version < ?", version) if version + scope.order(version: :desc).first end - def self.calculate_version(pool_id, updated_at) + def self.calculate_version(pool_id) 1 + where("pool_id = ?", pool_id).maximum(:version).to_i end @@ -25,13 +27,13 @@ def self.create_from_json(json) created_at = json["created_at"] ? Time.parse(json["created_at"]) : nil updated_at = json["updated_at"] ? Time.parse(json["updated_at"]) : created_at post_ids = json["post_ids"] - previous = find_previous(json["pool_id"], updated_at) + previous = find_previous(json["pool_id"]) subject = PoolVersion.new - subject.version = calculate_version(json["pool_id"], updated_at) + subject.version = calculate_version(json["pool_id"]) if previous && previous.updater_id == json["updater_id"] && updated_at - previous.updated_at < 1.hour subject = previous - previous = find_previous(previous.pool_id, previous.updated_at) + previous = find_previous(previous.pool_id, previous.version) end if previous diff --git a/models/post_version.rb b/models/post_version.rb index d2cbf18..3b421ae 100644 --- a/models/post_version.rb +++ b/models/post_version.rb @@ -13,11 +13,13 @@ class PostVersion < ActiveRecord::Base pool: 5 ) - def self.find_previous(post_id, updated_at) - where("post_id = ? and updated_at < ?", post_id, updated_at).order("id desc").first + def self.find_previous(post_id, version = nil) + scope = where(post_id: post_id) + scope = scope.where("version < ?", version) if version + scope.order(version: :desc).first end - def self.calculate_version(post_id, updated_at) + def self.calculate_version(post_id) 1 + where("post_id = ?", post_id).maximum(:version).to_i end @@ -25,13 +27,13 @@ def self.create_from_json(json) created_at = json["created_at"] ? Time.parse(json["created_at"]) : nil updated_at = json["updated_at"] ? Time.parse(json["updated_at"]) : created_at tags = json["tags"].scan(/\S+/) - previous = find_previous(json["post_id"], updated_at) + previous = find_previous(json["post_id"]) subject = PostVersion.new - subject.version = calculate_version(json["post_id"], updated_at) + subject.version = calculate_version(json["post_id"]) if previous && previous.updater_id == json["updater_id"] && updated_at - previous.updated_at < 1.hour subject = previous - previous = find_previous(previous.post_id, previous.updated_at) + previous = find_previous(previous.post_id, previous.version) end if previous