Spaces:
Sleeping
Sleeping
Scott Hiett
commited on
Commit
·
0f49779
1
Parent(s):
2dbe17d
Standardise errors
Browse files- lib/srh/http/base_router.ex +24 -19
lib/srh/http/base_router.ex
CHANGED
@@ -71,41 +71,46 @@ defmodule Srh.Http.BaseRouter do
|
|
71 |
end
|
72 |
|
73 |
defp handle_response(response, conn) do
|
74 |
-
|
|
|
|
|
|
|
|
|
75 |
case response do
|
76 |
{:ok, data} ->
|
77 |
-
|
78 |
|
79 |
{:not_found, message} ->
|
80 |
-
|
81 |
|
82 |
{:malformed_data, message} ->
|
83 |
-
|
84 |
|
85 |
{:redis_error, data} ->
|
86 |
-
|
87 |
|
88 |
{:not_authorized, message} ->
|
89 |
-
|
90 |
|
91 |
{:connection_error, message} ->
|
92 |
-
|
93 |
-
|
94 |
-
{:server_error, _} ->
|
95 |
-
%{code: 500, message: "An error occurred internally", json: false}
|
96 |
|
97 |
_ ->
|
98 |
-
|
99 |
end
|
100 |
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
|
|
|
|
|
|
|
|
110 |
end
|
111 |
end
|
|
|
71 |
end
|
72 |
|
73 |
defp handle_response(response, conn) do
|
74 |
+
# Errors are strings, and data just means the content is directly encoded with Jason.encode!
|
75 |
+
# {404, {:error, "Message"}}
|
76 |
+
# {200, {:data, ""}}
|
77 |
+
|
78 |
+
{code, resp_data} =
|
79 |
case response do
|
80 |
{:ok, data} ->
|
81 |
+
{200, {:data, data}}
|
82 |
|
83 |
{:not_found, message} ->
|
84 |
+
{404, {:error, message}}
|
85 |
|
86 |
{:malformed_data, message} ->
|
87 |
+
{400, {:error, message}}
|
88 |
|
89 |
{:redis_error, data} ->
|
90 |
+
{400, {:data, data}}
|
91 |
|
92 |
{:not_authorized, message} ->
|
93 |
+
{401, {:error, message}}
|
94 |
|
95 |
{:connection_error, message} ->
|
96 |
+
{500, {:error, message}}
|
|
|
|
|
|
|
97 |
|
98 |
_ ->
|
99 |
+
{500, {:error, "An error occurred internally"}}
|
100 |
end
|
101 |
|
102 |
+
conn
|
103 |
+
|> put_resp_header("content-type", "application/json")
|
104 |
+
|> send_resp(code, create_response_body(resp_data))
|
105 |
+
end
|
106 |
|
107 |
+
defp create_response_body({:data, data}) do
|
108 |
+
# Directly encode
|
109 |
+
Jason.encode!(data)
|
110 |
+
end
|
111 |
+
|
112 |
+
defp create_response_body({:error, error}) do
|
113 |
+
# Wrap in error
|
114 |
+
Jason.encode!(%{error: error})
|
115 |
end
|
116 |
end
|