chatwoot-develop/enterprise/app/models/captain/asset.rb
2026-01-12 19:04:15 -03:00

66 lines
1.6 KiB
Ruby

# == Schema Information
#
# Table name: captain_assets
#
# id :bigint not null, primary key
# name :string not null
# created_at :datetime not null
# updated_at :datetime not null
# account_id :bigint not null
#
# Indexes
#
# index_captain_assets_on_account_id (account_id)
# index_captain_assets_on_account_id_and_name (account_id,name) UNIQUE
#
class Captain::Asset < ApplicationRecord
self.table_name = 'captain_assets'
belongs_to :account
has_one_attached :file, dependent: :purge_later
validates :name, presence: true, uniqueness: { scope: :account_id }
validates :file, presence: true
validate :validate_file_attachment
before_validation :normalize_name
scope :ordered, -> { order(created_at: :desc) }
def file_url
return unless file.attached?
Rails.application.routes.url_helpers.rails_blob_url(file, only_path: false)
end
def file_type
file.blob.content_type if file.attached?
end
def file_size
file.blob.byte_size if file.attached?
end
private
def normalize_name
return if name.blank?
self.name = name.to_s.strip.parameterize(separator: '_')
end
def validate_file_attachment
return unless file.attached?
allowed_types = %w[image/png image/jpeg image/gif image/webp]
unless allowed_types.include?(file.blob.content_type)
errors.add(:file, 'must be a valid image (PNG, JPG, GIF, WEBP)')
return
end
return unless file.blob.byte_size > 10.megabytes
errors.add(:file, 'must be smaller than 10MB')
end
end