Packages

MRS Medication Registry System (dec.gov.ua)

Current section

Files

Jump to
mrs lib mrs_service.ex
Raw

lib/mrs_service.ex

defmodule MRS.Service do
require MRS
@endpoint "https://registry.dec.gov.ua/api"
def verify(), do: {:ssl, [{:verify, :verify_none}]}
def find(id, list), do:
:lists.flatten(
:lists.map(fn x ->
case :maps.get("id", x, []) do
a when a == id -> x
_ -> [] end end, list))
def reduceGet(url, name, pageRequested, count, acc) do
bearer = :application.get_env(:mrs, :bearer, '')
accept = 'application/json'
headers = [{'Authorization',bearer},{'accept',accept}]
address = '#{@endpoint}#{url}?page=#{pageRequested}&limit=#{count}'
{:ok,{{_,status,_},_headers,body}} =
:httpc.request(:get, {address, headers}, [{:timeout,100000},verify()], [{:body_format,:binary}])
case status do
500 -> acc
200 -> res = :jsone.decode(body)
pages = Map.get(res, "pages", count)
records = Map.get(res, "records", [])
:io.format '#{name}: ~p~n', [{status, pages, pageRequested, count, length(records)}]
new = :lists.flatten([records|acc])
case pageRequested do
_ when pageRequested == pages -> new
_ -> reduceGet(url, name, (pageRequested+1), count, new)
end
end
end
def registry(), do: reduceGet("/registry/", "registry", 1, 1000, []) # most latency-heavy
def sku(), do: reduceGet("/registry/sku", "sku", 1, 1000, [])
def packages(), do: reduceGet("/dictionaries/packagetype", "packages", 1, 1000, [])
def inn(), do: reduceGet("/dictionaries/inn", "inn", 1, 1000, [])
def atc(), do: reduceGet("/dictionaries/atc_codes", "atc", 1, 1000, [])
def manufacturers(), do: reduceGet("/dictionaries/manufacturer", "manufacturer", 1, 1000, [])
def authholders(), do: reduceGet("/dictionaries/authorizationholder", "authholder", 1, 1000, [])
end