Files
redux-scraper/app/models/domain/perceptual_hash.rb
2025-03-03 17:05:58 +00:00

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