mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-12-29 19:51:01 +08:00
80 lines
2.4 KiB
Ruby
80 lines
2.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class BiomoleculeToolkitClient
|
|
MACROMOLECULES_PATH = '/api/macromolecules'
|
|
MACROMOLECULES_ATTRIBUTES_PATH = '/api/admin/attributes/MACROMOLECULE'
|
|
|
|
class BiomoleculeToolkitClientException < StandardError; end
|
|
|
|
def initialize
|
|
@uri = URI.parse(Rails.application.config.x.biomolecule_toolkit_base_url)
|
|
@http = Net::HTTP.new(@uri.host, @uri.port)
|
|
@http.use_ssl = (@uri.scheme == 'https')
|
|
end
|
|
|
|
def healthy?
|
|
request = Net::HTTP::Get.new(build_request_path('/api/health'))
|
|
process_request(request)&.dig('status') == 'UP'
|
|
end
|
|
|
|
def list_attributes
|
|
request = Net::HTTP::Get.new(build_request_path(MACROMOLECULES_ATTRIBUTES_PATH))
|
|
process_request(request)
|
|
end
|
|
|
|
def list
|
|
request = Net::HTTP::Get.new(build_request_path(MACROMOLECULES_PATH))
|
|
process_request(request)
|
|
end
|
|
|
|
def create(params:)
|
|
request = Net::HTTP::Post.new(build_request_path(MACROMOLECULES_PATH))
|
|
request.body = params
|
|
process_request(request)
|
|
end
|
|
|
|
def get(cid:)
|
|
request = Net::HTTP::Get.new(build_request_path("#{MACROMOLECULES_PATH}/#{CGI.escape(cid)}"))
|
|
process_request(request)
|
|
end
|
|
|
|
def update(cid:, params:)
|
|
request = Net::HTTP::Put.new(build_request_path("#{MACROMOLECULES_PATH}/#{CGI.escape(cid)}"))
|
|
request.body = params
|
|
process_request(request)
|
|
end
|
|
|
|
def delete
|
|
request = Net::HTTP::Delete.new(build_request_path("#{MACROMOLECULES_PATH}/#{CGI.escape(cid)}"))
|
|
process_request(request)
|
|
end
|
|
|
|
private
|
|
|
|
def build_request_path(sub_path)
|
|
File.join(@uri.path, sub_path)
|
|
end
|
|
|
|
def process_request(request)
|
|
if Rails.application.config.x.biomolecule_toolkit_api_key
|
|
request['x-api-key'] = Rails.application.config.x.biomolecule_toolkit_api_key
|
|
end
|
|
request['Content-Type'] = 'application/json'
|
|
response = @http.request(request)
|
|
|
|
case response
|
|
when Net::HTTPOK
|
|
JSON.parse(response.body)
|
|
when Net::HTTPNoContent
|
|
true
|
|
else
|
|
error_message = JSON.parse(response.body).dig('error', 'message')
|
|
error_message ||= I18n.t('biomolecule_toolkit_client.generic_error')
|
|
raise BiomoleculeToolkitClientException, error_message
|
|
end
|
|
rescue JSON::ParserError
|
|
raise BiomoleculeToolkitClientException, I18n.t('biomolecule_toolkit_client.response_parsing_error')
|
|
rescue StandardError
|
|
raise BiomoleculeToolkitClientException, I18n.t('biomolecule_toolkit_client.generic_error')
|
|
end
|
|
end
|