REPP: Move domain transfer to rails API format

This commit is contained in:
Karl Erik Õunapuu 2020-10-14 15:46:57 +03:00
parent d1ab61f424
commit ee199f9318
No known key found for this signature in database
GPG key ID: C9DD647298A34764
3 changed files with 42 additions and 48 deletions

View file

@ -1,48 +0,0 @@
module Repp
class DomainTransfersV1 < Grape::API
version 'v1', using: :path
resource :domain_transfers do
post '/' do
params do
requires :data, type: Hash do
requires :domainTransfers, type: Array do
requires :domainName, type: String, allow_blank: false
requires :transferCode, type: String, allow_blank: false
end
end
end
new_registrar = current_user.registrar
domain_transfers = params['data']['domainTransfers']
successful_domain_transfers = []
errors = []
domain_transfers.each do |domain_transfer|
domain_name = domain_transfer['domainName']
transfer_code = domain_transfer['transferCode']
domain = Domain.find_by(name: domain_name)
if domain
if domain.transfer_code == transfer_code
DomainTransfer.request(domain, new_registrar)
successful_domain_transfers << { type: 'domain_transfer', attributes: { domain_name: domain.name } }
else
errors << { title: "#{domain_name} transfer code is wrong" }
end
else
errors << { title: "#{domain_name} does not exist" }
end
end
if errors.none?
status 200
@response = { data: successful_domain_transfers }
else
status 400
@response = { errors: errors }
end
end
end
end
end

View file

@ -25,8 +25,49 @@ module Repp
render_success(data: data) render_success(data: data)
end end
def transfer
@errors ||= []
successful = []
params[:data][:domain_transfers].each do |transfer|
domain = transferable_domain(transfer[:domain_name], transfer[:transfer_code])
next unless domain
DomainTransfer.request(domain, current_user.registrar)
successful << { type: 'domain_transfer', attributes: { domain_name: domain.name } }
end
render_success(data: { errors: @errors }) and return if @errors.any?
render_success(data: successful)
end
def transferable_domain(domain_name, transfer_code)
domain = Domain.find_by(name: domain_name)
valid_transfer_code = domain.transfer_code == transfer_code
add_error("#{domain_name} does not exist") and return unless domain
add_error("#{domain_name} transfer code is wrong") and return unless valid_transfer_code
domain
end
def add_error(msg)
@errors ||= []
@errors << { title: msg }
end
private private
def transfer_params
params.require(:data).require(:domain_transfers).each do |t|
t.require(:domain_name)
t.permit(:domain_name)
t.require(:transfer_code)
t.permit(:transfer_code)
end
params.require(:data).permit(domain_transfers: %i[domain_name transfer_code])
end
def transfer_info_params def transfer_info_params
params.require(:id) params.require(:id)
params.permit(:id) params.permit(:id)

View file

@ -62,6 +62,7 @@ Rails.application.routes.draw do
resources :domains do resources :domains do
collection do collection do
get ':id/transfer_info', to: 'domains#transfer_info', constraints: { id: /.*/ } get ':id/transfer_info', to: 'domains#transfer_info', constraints: { id: /.*/ }
post 'transfer', to: 'domains#transfer'
end end
end end