# frozen_string_literal: true
class UserAlias < ApplicationRecord
before_validation(on: :create) { self.uuid ||= SecureRandom.uuid }
attribute :uuid, :uuid
attribute :user_id, :integer
attribute :community_id, :integer
attribute :server_id, :integer
attribute :value, :string
belongs_to :user
belongs_to :community, optional: true
belongs_to :server, optional: true
validates :uuid, uniqueness: true, presence: true
validates :value, uniqueness: {
scope: [:user_id, :server_id],
message: "This alias already exists for a server"
}
validates :value, uniqueness: {
scope: [:user_id, :community_id],
message: "This alias already exists for a server"
}
validates :value, length: {in: 1..64}
def self.find_server_alias(value)
eager_load(:server).where(value: value).where.not(server_id: nil).first
end
def self.find_community_alias(value)
eager_load(:community).where(value: value).where.not(community_id: nil).first
end
def self.clientize
all.map(&:clientize)
end
def clientize
if community_id
type = "community"
target = community.clientize
else
type = "server"
target = server.clientize
end
{id: uuid, type: type, target: target, value: value, state: "unchanged"}
end
end