diff --git a/backend/lib/tasks/sync_nico.rake b/backend/lib/tasks/sync_nico.rake index 00e309f..3d3166e 100644 --- a/backend/lib/tasks/sync_nico.rake +++ b/backend/lib/tasks/sync_nico.rake @@ -27,7 +27,9 @@ namespace :nico do end end - PostTag.where(post_id: post.id, tag_id: to_remove.to_a).kept.find_each(&:discard!) + PostTag.where(post_id: post.id, tag_id: to_remove.to_a).kept.find_each do |pt| + pt.discard_by!(nil) + end end mysql_user = ENV['MYSQL_USER'] @@ -57,12 +59,14 @@ namespace :nico do end post.save! post.resized_thumbnail! + sync_post_tags!(post, [Tag.tagme.id]) end kept_tags = post.tags.reload kept_non_nico_ids = kept_tags.where.not(category: 'nico').pluck(:id).to_set desired_nico_ids = [] + desired_non_nico_ids = [] datum['tags'].each do |raw| name = "nico:#{ raw }" tag = Tag.find_or_initialize_by(name:) do |t| @@ -70,17 +74,17 @@ namespace :nico do end tag.save! if tag.new_record? desired_nico_ids << tag.id - desired_nico_ids.concat(tag.linked_tags.pluck(:id)) + unless tag.in?(kept_tags) + desired_non_nico_ids << tag.linked_tags.pluck(:id) + desired_nico_ids.concat(tag.linked_tags.pluck(:id)) + end end desired_nico_ids.uniq! - desired_extra_ids = [] - desired_extra_ids << Tag.tagme.id if kept_tags.size < 10 - desired_extra_ids << Tag.bot.id - desired_extra_ids.compact! - desired_extra_ids.uniq! - - desired_all_ids = kept_non_nico_ids.to_a + desired_nico_ids + desired_extra_ids + desired_all_ids = kept_non_nico_ids.to_a + desired_nico_ids + if kept_non_nico_ids.to_set != desired_non_nico_ids.to_set + desired_all_ids << Tag.bot.id + end desired_all_ids.uniq! sync_post_tags!(post, desired_all_ids)