|
- 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
|