mirror of
https://github.com/internetee/registry.git
synced 2025-07-27 21:16:12 +02:00
84 lines
2.4 KiB
Ruby
84 lines
2.4 KiB
Ruby
module Serializers
|
|
module Repp
|
|
class Domain
|
|
attr_reader :domain
|
|
|
|
def initialize(domain, sponsored: true, simplify: false)
|
|
@domain = domain
|
|
@sponsored = sponsored
|
|
@simplify = simplify
|
|
end
|
|
|
|
# rubocop:disable Metrics/MethodLength
|
|
# rubocop:disable Metrics/AbcSize
|
|
def to_json(obj = domain)
|
|
return simple_object if @simplify
|
|
|
|
json = {
|
|
name: obj.name, registrant: registrant,
|
|
created_at: obj.created_at, updated_at: obj.updated_at,
|
|
expire_time: obj.expire_time,
|
|
outzone_at: obj.outzone_at, delete_date: obj.delete_date,
|
|
force_delete_date: obj.force_delete_date, contacts: contacts,
|
|
nameservers: nameservers, dnssec_keys: dnssec_keys,
|
|
statuses: statuses, registrar: registrar,
|
|
dispute: Dispute.active.exists?(domain_name: obj.name)
|
|
}
|
|
json[:transfer_code] = obj.auth_info if @sponsored
|
|
json
|
|
end
|
|
# rubocop:enable Metrics/MethodLength
|
|
# rubocop:enable Metrics/AbcSize
|
|
|
|
def contacts
|
|
domain.domain_contacts.includes(:contact).map do |dc|
|
|
contact = dc.contact
|
|
{ code: contact.code, type: dc.type,
|
|
name: contact.name_disclosed_by_registrar(domain.registrar_id) }
|
|
end
|
|
end
|
|
|
|
def nameservers
|
|
domain.nameservers.order(:created_at).as_json(only: %i[id hostname ipv4 ipv6])
|
|
end
|
|
|
|
def dnssec_keys
|
|
domain.dnskeys.order(:updated_at).as_json(only: %i[id flags protocol alg public_key])
|
|
end
|
|
|
|
def registrar
|
|
domain.registrar.as_json(only: %i[name website])
|
|
end
|
|
|
|
def registrant
|
|
rant = domain.registrant
|
|
{
|
|
name: rant.name,
|
|
code: rant.code,
|
|
}
|
|
end
|
|
|
|
def statuses(statuses_with_notes = {})
|
|
status_notes = domain.status_notes
|
|
domain.statuses.each do |status|
|
|
status_note = status_notes[status.to_s].presence || ''
|
|
statuses_with_notes.merge!({ "#{status}": status_note })
|
|
end
|
|
statuses_with_notes.with_indifferent_access
|
|
end
|
|
|
|
private
|
|
|
|
def simple_object
|
|
json = {
|
|
name: domain.name,
|
|
expire_time: domain.expire_time,
|
|
registrant: registrant,
|
|
statuses: statuses,
|
|
}
|
|
json[:transfer_code] = domain.auth_info if @sponsored
|
|
json
|
|
end
|
|
end
|
|
end
|
|
end
|