Scott Hiett commited on
Commit
0f49779
·
1 Parent(s): 2dbe17d

Standardise errors

Browse files
Files changed (1) hide show
  1. 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
- %{code: code, message: message, json: json} =
 
 
 
 
75
  case response do
76
  {:ok, data} ->
77
- %{code: 200, message: Jason.encode!(data), json: true}
78
 
79
  {:not_found, message} ->
80
- %{code: 404, message: message, json: false}
81
 
82
  {:malformed_data, message} ->
83
- %{code: 400, message: message, json: false}
84
 
85
  {:redis_error, data} ->
86
- %{code: 400, message: Jason.encode!(data), json: true}
87
 
88
  {:not_authorized, message} ->
89
- %{code: 401, message: message, json: false}
90
 
91
  {:connection_error, message} ->
92
- %{code: 500, message: Jason.encode!(%{error: message}), json: true}
93
-
94
- {:server_error, _} ->
95
- %{code: 500, message: "An error occurred internally", json: false}
96
 
97
  _ ->
98
- %{code: 500, message: "An error occurred internally", json: false}
99
  end
100
 
101
- case json do
102
- true ->
103
- conn
104
- |> put_resp_header("content-type", "application/json")
105
 
106
- false ->
107
- conn
108
- end
109
- |> send_resp(code, message)
 
 
 
 
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