# frozen_string_literal: true class AssetSyncToken < ApplicationRecord belongs_to :user belongs_to :asset after_initialize :generate_token after_initialize :set_default_expiration validates :token, uniqueness: true, presence: true def version_token OpenSSL::Digest::SHA256.base64digest(asset.file.checksum + asset.file_name) end def token_valid? !revoked_at? && expires_at > Time.current end def conflicts?(token) asset.locked? || version_token != token end private def generate_token self.token ||= SecureRandom.urlsafe_base64(32) end def set_default_expiration self.expires_at ||= Constants::ASSET_SYNC_TOKEN_EXPIRATION.from_now end end