request.rb 1.48 KB
# == Schema Information
#
# Table name: v_libras_requests
#
#  id             :integer          not null, primary key
#  status         :string(255)
#  service_type   :string(255)
#  owner_id       :integer
#  params         :text
#  response       :text
#  created_at     :datetime
#  updated_at     :datetime
#  video_filename :string(255)
#

class VLibras::Request < ActiveRecord::Base
  serialize :params
  attr_accessor :video

  belongs_to :owner, :class => User

  has_one :video, :class => VLibras::Video

  validates :service_type,
              presence: true,
              inclusion: { in: %w(video-legenda video), message: "%{value} is not a valid service type" }

  validates :status,
            presence: true,
            inclusion: { in: %w(created processing error success), message: "%{value} is not a valid status" }

  before_validation :default_values

  default_scope { order('created_at DESC') }

  def self.build_from_params(params, user)
    request = self.new

    request.service_type = params[:service]
    request.video_filename = params[:video].original_filename
    request.owner = user

    request.params = params[:params]

    request
  end

  def perform_request(files)
    logger.debug '[VLibras::Request] Starting request'
    self.update!(status: 'processing')

    ApiClient::Client.submit(self, files)

    logger.debug '[VLibras::Request] Request done'
  end
  handle_asynchronously :perform_request

private
  def default_values
    self.status ||= 'created'
  end
end