Skip to content

Commit

Permalink
service
Browse files Browse the repository at this point in the history
  • Loading branch information
5HT committed Feb 12, 2024
1 parent 4d4a431 commit f245ccf
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 16 deletions.
12 changes: 6 additions & 6 deletions lib/hl7_service.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,24 @@ defmodule HL7.Service do

# Implemented

def root(conn), do: HL7.Meta.meta(conn)
def postRoot(conn), do: HL7.Meta.meta(conn)
def postMeta(conn), do: HL7.Meta.meta(conn)
def meta(conn), do: HL7.Meta.meta(conn)
def get4(conn,base,type,id,spec), do: HL7.Get.get(conn,base,type,id,spec)
def post4(conn,base,type,id,"$validate" = spec), do: HL7.Validate.validate(conn,base,type,id,spec)
def post4(conn,base,compartment,id,qualifier), do: HL7.Compartment.compartment(conn,base,compartment,id,qualifier)
def put4(conn,base,type,id,spec), do: HL7.Put.put(conn,base,type,id,spec)
def delete4(conn,base,type,id,spec), do: HL7.Delete.delete(conn,base,type,id,spec)
def post2(conn,base,qualifier), do: HL7.Search.search(conn,base,qualifier)
def post3(conn,base,resource,qualifier), do: HL7.Search.post3(conn,base,qualifier)
def post5(conn,_base,compartment,id,resource,qualifier), do: HL7.Compartment.post5(conn,_base,compartment,id,resource,qualifier)
def post3(conn,base,resource,qualifier), do: HL7.Search.post3(conn,base,resource,qualifier)
def post5(conn,base,compartment,id,resource,qualifier), do: HL7.Compartment.post5(conn,base,compartment,id,resource,qualifier)

# Not Implemented Yet

def postRoot(conn), do: send_resp(conn, 200, encode([%{}]))
def postDiff(conn), do: send_resp(conn, 200, encode([%{}]))
def postExport(conn), do: send_resp(conn, 200, encode([%{}]))
def postMeta(conn), do: send_resp(conn, 200, encode([%{}]))
def reindex(conn), do: send_resp(conn, 200, encode([%{}]))
def root(conn), do: send_resp(conn, 200, encode([%{}]))
def history(conn), do: send_resp(conn, 200, encode([%{}]))
def diff(conn), do: send_resp(conn, 200, encode([%{}]))
def metadata(conn), do: send_resp(conn, 200, encode([%{"resourceType" => "CapabilityStatement"}]))
Expand All @@ -31,7 +31,7 @@ defmodule HL7.Service do
def encode(x) do
case Jason.encode(x) do
{:ok, bin} -> bin <> "\n"
{:error, %Protocol.UndefinedError{protocol: _, value: value, description: desc}} -> desc <> "\n"
# {:error, %Protocol.UndefinedError{protocol: _, value: value, description: desc}} -> desc <> "\n"
{:error, %Protocol.UndefinedError{description: _, protocol: _, value: {:error, %Xema.ValidationError{message: _, reason: err}}}} -> err <> "\n"
{:error, %Xema.ValidationError{message: _, reason: err}} -> err <> "\n"
end |> Jason.Formatter.pretty_print
Expand Down
2 changes: 1 addition & 1 deletion lib/service/hl7_search.ex
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ defmodule HL7.Search do
:io.format 'POST/2:#{qualifier}', []
send_resp(conn, 200, HL7.Service.encode(%{"qualifier" => qualifier}))
end
def post3(conn,base,resource,qualifier) do
def post3(conn,_base,resource,qualifier) do
:io.format 'POST/3:#{resource}/#{qualifier}', []
send_resp(conn, 200, HL7.Service.encode(%{"resource" => resource, "qualifier" => qualifier}))
end
Expand Down
16 changes: 7 additions & 9 deletions lib/service/hl7_validate.ex
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@ defmodule HL7.Validate do
import Plug.Conn
def validate(conn,_,type,id,"$validate" = spec) do
fun = fn
(%Xema.ValidationError{message: _, reason: %{required: req}}, path, acc) ->
(%Xema.ValidationError{message: _, reason: %{required: req}}, _path, acc) ->
fields = :string.join :lists.map(fn x -> :erlang.binary_to_list(x) end, req), ','
[%{"details" => "Fields [#{fields}] are required.",
"severity" => "error",
"code" => "structure"}
|acc]
(%Xema.ValidationError{message: _, reason: %{all_of: [%{properties: errors}]}}, path, acc) ->
(%Xema.ValidationError{message: _, reason: %{all_of: [%{properties: errors}]}}, _path, acc) ->
[:lists.map(fn err ->
%{"details" => Jason.encode!(Map.get(errors, err)),
"severity" => "error",
"code" => "structure"}
end, Map.keys(errors))|acc]
(%Xema.ValidationError{message: _, reason: %{properties: errors}}, path, acc) ->
(%Xema.ValidationError{message: _, reason: %{properties: errors}}, _path, acc) ->
[:lists.map(fn err ->
%{"details" => Jason.encode!(Map.get(errors, err)),
"severity" => "error",
Expand All @@ -26,25 +26,23 @@ defmodule HL7.Validate do
schema = HL7.Loader.loadSchema("#{type}")
obj = Jason.decode!(body)
res = case Xema.validate(schema, obj) do
{:error, %Xema.ValidationError{message: msg, reason: err}} = errors ->
{:error, %Xema.ValidationError{message: _, reason: _}} = errors ->
:io.format 'Validation Errors: ~p~n', [errors]
Xema.ValidationError.travers_errors(errors, [], fun)
:ok ->
case Map.get(obj, "text") do
nil ->
[%{"details" => "Validation is successful!",
"severity" => "information",
"code" => "informational"},
%{"details" => "dom-6: A resource should have narrative for robust management",
[%{"details" => "dom-6: A resource should have narrative for robust management",
"severity" => "warning",
"expression" => type,
"code" => "invariant"
}]
_ ->
[]
end ++
[%{"details" => "Validation is successful!",
"severity" => "information",
"code" => "informational"}]
end
end
:io.format 'POST/4:#{type}#{id}/#{spec}: ~p (~pKiB)', [res,:erlang.round(:erlang.size(body) / 1024)]
send_resp(conn, 200, HL7.Service.encode(%{"resourceType" => "OperationOutcome", "issues" => res}))
Expand Down

0 comments on commit f245ccf

Please sign in to comment.