29 lines
825 B
Ruby
29 lines
825 B
Ruby
# typed: strict
|
|
class Domain::PerceptualHash < ReduxApplicationRecord
|
|
include AttrJsonRecordAliases
|
|
self.table_name = "domain_perceptual_hashes"
|
|
|
|
belongs_to :thumbnail,
|
|
foreign_key: :thumbnail_id,
|
|
class_name: "::Domain::PostFileThumbnail"
|
|
|
|
validates :algorithm, presence: true
|
|
validates :hash_value, presence: true
|
|
|
|
# Ensure uniqueness of algorithm and hash_version per thumbnail
|
|
validates :algorithm, uniqueness: { scope: %i[thumbnail_id] }
|
|
|
|
# Supported perceptual hash algorithms
|
|
ALGORITHMS =
|
|
T.let(
|
|
{
|
|
phash: "phash", # Perceptual hash
|
|
dhash: "dhash", # Difference hash
|
|
ahash: "ahash", # Average hash
|
|
whash: "whash", # Wavelet hash
|
|
colorhash: "colorhash", # Color histogram hash
|
|
},
|
|
T::Hash[Symbol, String],
|
|
)
|
|
end
|