@@ -31,7 +31,19 @@ defmodule AshJsonApi.Error do
3131 [ error ]
3232 end
3333
34- def to_json_api_errors ( domain , resource , % { class: :invalid } = error , type ) do
34+ def to_json_api_errors ( _domain , _resource , % { class: :forbidden } = error , _type ) do
35+ [
36+ % __MODULE__ {
37+ id: Ash.UUID . generate ( ) ,
38+ status_code: class_to_status ( error . class ) ,
39+ code: "forbidden" ,
40+ title: "Forbidden" ,
41+ detail: "forbidden"
42+ }
43+ ]
44+ end
45+
46+ def to_json_api_errors ( domain , resource , error , type ) do
3547 if AshJsonApi.ToJsonApiError . impl_for ( error ) do
3648 error
3749 |> AshJsonApi.ToJsonApiError . to_json_api_error ( )
@@ -53,13 +65,21 @@ defmodule AshJsonApi.Error do
5365 "`#{ uuid } `: AshJsonApi.Error not implemented for error:\n \n #{ Exception . format ( :error , error , stacktrace ) } "
5466 )
5567
68+ code = if error . class == :forbidden , do: "forbidden" , else: "something_went_wrong"
69+ title = if error . class == :forbidden , do: "Forbidden" , else: "SomethingWentWrong"
70+
71+ detail =
72+ if error . class == :forbidden ,
73+ do: "forbidden" ,
74+ else: "Something went wrong. Error id: #{ uuid } "
75+
5676 if AshJsonApi.Domain.Info . show_raised_errors? ( domain ) do
5777 [
5878 % __MODULE__ {
5979 id: uuid ,
6080 status_code: class_to_status ( error . class ) ,
61- code: "something_went_wrong" ,
62- title: "SomethingWentWrong" ,
81+ code: code ,
82+ title: title ,
6383 detail: """
6484 Raised error: #{ uuid }
6585
@@ -72,54 +92,15 @@ defmodule AshJsonApi.Error do
7292 % __MODULE__ {
7393 id: uuid ,
7494 status_code: class_to_status ( error . class ) ,
75- code: "something_went_wrong" ,
76- title: "SomethingWentWrong" ,
77- detail: "Something went wrong. Error id: #{ uuid } "
95+ code: code ,
96+ title: title ,
97+ detail: detail
7898 }
7999 ]
80100 end
81101 end
82102 end
83103
84- def to_json_api_errors ( _domain , _resource , % { class: :forbidden } = error , _type ) do
85- [
86- % __MODULE__ {
87- id: Ash.UUID . generate ( ) ,
88- status_code: class_to_status ( error . class ) ,
89- code: "forbidden" ,
90- title: "Forbidden" ,
91- detail: "forbidden"
92- }
93- ]
94- end
95-
96- def to_json_api_errors ( _domain , _resource , error , _type ) do
97- uuid = Ash.UUID . generate ( )
98-
99- stacktrace =
100- case error do
101- % { stacktrace: % { stacktrace: v } } ->
102- v
103-
104- _ ->
105- nil
106- end
107-
108- Logger . warning (
109- "`#{ uuid } `: AshJsonApi.Error not implemented for error:\n \n #{ Exception . format ( :error , error , stacktrace ) } "
110- )
111-
112- [
113- % __MODULE__ {
114- id: uuid ,
115- status_code: class_to_status ( error . class ) ,
116- code: "something_went_wrong" ,
117- title: "SomethingWentWrong" ,
118- detail: "Something went wrong. Error id: #{ uuid } "
119- }
120- ]
121- end
122-
123104 @ doc "Turns an error class into an HTTP status code"
124105 def class_to_status ( :forbidden ) , do: 403
125106 def class_to_status ( :invalid ) , do: 400
0 commit comments