30 lines
859 B
Ruby
30 lines
859 B
Ruby
module Jasmine
|
|
class Document < ApplicationRecord
|
|
self.table_name = 'jasmine_documents'
|
|
|
|
belongs_to :account
|
|
belongs_to :collection, class_name: 'Jasmine::Collection'
|
|
has_many :chunks, class_name: 'Jasmine::DocumentChunk', foreign_key: :document_id, dependent: :delete_all
|
|
|
|
enum status: { pending: 0, processing: 1, indexed: 2, failed: 3 }
|
|
enum source_type: { manual: 0, upload: 1, url: 2, faq: 3 }
|
|
|
|
validates :content, presence: true
|
|
validate :validate_account_consistency
|
|
|
|
# Async processing job
|
|
after_create_commit :enqueue_embed_job
|
|
|
|
private
|
|
|
|
def validate_account_consistency
|
|
return if collection.nil?
|
|
errors.add(:base, 'Collection account mismatch') if collection.account_id != account_id
|
|
end
|
|
|
|
def enqueue_embed_job
|
|
Jasmine::EmbedDocumentJob.perform_later(id)
|
|
end
|
|
end
|
|
end
|