You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.5 KiB
51 lines
1.5 KiB
class Videos::BatchPublishService < ApplicationService
|
|
Error = Class.new(StandardError)
|
|
|
|
attr_reader :user, :params
|
|
|
|
def initialize(user, params)
|
|
@user = user
|
|
@params = params
|
|
end
|
|
|
|
def call
|
|
video_params = Array.wrap(params[:videos]).compact
|
|
return if video_params.blank?
|
|
Rails.logger.info("#####video_course: #{video_params}")
|
|
|
|
video_ids = []
|
|
ActiveRecord::Base.transaction do
|
|
video_params.each do |param|
|
|
video = user.videos.find_by(uuid: param[:video_id])
|
|
Rails.logger.info("video.processing_video_apply:#{video}")
|
|
Rails.logger.info("video.processing_video_apply:#{video.blank? || video.processing_video_apply}")
|
|
next if video.blank? || video.processing_video_apply.present?
|
|
|
|
raise Error, '视频还未上传完成' if video.vod_uploading?
|
|
|
|
video.title = param[:title].to_s.strip.presence || video.title
|
|
video.apply_publish
|
|
if param[:course_id].present?
|
|
video.status = "published"
|
|
end
|
|
video.save!
|
|
|
|
if param[:course_id].present?
|
|
video.video_applies.create!(status: "agreed")
|
|
else
|
|
video.video_applies.create!
|
|
end
|
|
|
|
video_ids << video.id
|
|
|
|
# 如果是课堂上传则创建课堂记录
|
|
Rails.logger.info("#####param: #{ param[:course_id]}")
|
|
if param[:course_id].present?
|
|
video.course_videos.create!(course_id: param[:course_id])
|
|
end
|
|
end
|
|
end
|
|
|
|
BatchPublishVideoNotifyJob.perform_later(user.id, video_ids) if video_ids.present?
|
|
end
|
|
end |