aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/favorite.rb
diff options
context:
space:
mode:
authorRhenium <rhenium@rhe.jp>2014-02-28 06:29:16 +0900
committerRhenium <rhenium@rhe.jp>2014-02-28 06:29:16 +0900
commitb2c328e84d03e73d94938f2f2bf58585feaf9625 (patch)
treee697a1b1cd65f0f224c8e9dce0b06138b898f4ef /app/models/favorite.rb
parent8e70230529b7c9a3979bca3479e5043a0773912e (diff)
downloadaclog-b2c328e84d03e73d94938f2f2bf58585feaf9625.tar.gz
refactor collector-receiver
Diffstat (limited to 'app/models/favorite.rb')
-rw-r--r--app/models/favorite.rb35
1 files changed, 21 insertions, 14 deletions
diff --git a/app/models/favorite.rb b/app/models/favorite.rb
index bc66127..d266135 100644
--- a/app/models/favorite.rb
+++ b/app/models/favorite.rb
@@ -2,25 +2,32 @@ class Favorite < ActiveRecord::Base
belongs_to :tweet
belongs_to :user
- after_create do
- Tweet.update_counters(self.tweet_id, favorites_count: 1, reactions_count: 1)
- end
-
- after_destroy do
- Tweet.update_counters(self.tweet_id, favorites_count: -1, reactions_count: -1)
- end
+ def self.create_from_json(json)
+ tweet = Tweet.create_from_json(json[:target_object])
+ user = User.create_from_json(json[:source])
- def self.from_json(json)
- tweet = Tweet.from_json(json[:target_object])
- user = User.from_json(json[:source])
favorite = Favorite.new(tweet: tweet, user: user)
- favorite.save!
- logger.debug("Successfully created a favorite: #{favorite.id}")
+
+ transaction do
+ favorite.save!
+ tweet.update_reactions_count(favorites_count: 1, json: json[:target_object])
+ end
rescue ActiveRecord::RecordNotUnique => e
- logger.debug("Failed to create a favorite: #{favorite}: #{e.class}")
+ logger.debug("Duplicate favorite: #{favorite.user_id} => #{favorite.tweet_id}")
rescue => e
- logger.error("Failed to create a favorite: #{favorite}: #{e.class}: #{e.message}/#{e.backtrace.join("\n")}")
+ logger.error("Failed to create a favorite: #{e.class}: #{e.message}/#{e.backtrace.join("\n")}")
ensure
return favorite
end
+
+ def self.destroy_from_json(json)
+ transaction do
+ deleted_count = self.where(user_id: json[:source][:id], tweet_id: json[:target_object][:id]).delete_all
+ if deleted_count > 0
+ Tweet.find(json[:target_object][:id]).update_reactions_count(favorites_count: -1, json: json[:target_object])
+ end
+ end
+ rescue => e
+ logger.error("Failed to destroy a favorite: #{e.class}: #{e.message}/#{e.backtrace.join("\n")}")
+ end
end