class PostImporter def initialize provider: @provider = provider end def import_posts source_videos alive_codes = [] ApplicationRecord.transaction do source_videos.each do |source_video| alive_codes << source_video.fetch(:code) deerjikist_tag = deerjikist_tag_of(source_video) video = upsert_post(source_video, deerjikist_tag) end end end private attr_reader :provider def deerjikist_tag_of source_video user_code = source_video[:user_code] return nil if user_code.blank? deerjikist&.tag end def upsert_post source_video, deerjikist_tag url = case provider when 'youtube' "https://youtube.com/watch/#{ source_video.fetch(:code) }" end raise 'ちんぽ!' if url.blank? Post.find_or_initialize_by(url:).tap do |post| post.title = source_viedo.fetch(:title) post.uploaded_user_id = nil post.original_created_from = source_video.fetch(:uploaded_at) post.original_created_before = post.original_created_from + 1.min post.tags << (deerjikist_tag || no_deerjikist) post.tags << Tag.youtube post.tags << Tag.video post.tags << Tag.bot post.tags << Tag.tagme post.save! end end end