1 |
|
-module(mongoose_graphql_operations). |
2 |
|
|
3 |
|
-export([verify_operations/2]). |
4 |
|
|
5 |
|
-include_lib("graphql/src/graphql_schema.hrl"). |
6 |
|
-include_lib("graphql/src/graphql_internal.hrl"). |
7 |
|
|
8 |
|
verify_operations(Ctx, #document{definitions = Definitions}) -> |
9 |
2940 |
Method = maps:get(method, Ctx, undefined), |
10 |
2940 |
[verify_op_type(Method, op_type(Ty)) || #op{id = Id, ty = Ty} <- Definitions, |
11 |
2940 |
is_requested_op(Ctx, Id)], |
12 |
2940 |
ok. |
13 |
|
|
14 |
|
verify_op_type(Method, OpType) -> |
15 |
2940 |
case is_supported(Method, OpType) of |
16 |
|
true -> |
17 |
2940 |
ok; |
18 |
|
false -> |
19 |
:-( |
Error = {unsupported_operation, Method, OpType}, |
20 |
:-( |
graphql_err:abort([], verify, Error) |
21 |
|
end. |
22 |
|
|
23 |
:-( |
is_supported(Method, subscription) -> Method =:= sse; |
24 |
2940 |
is_supported(Method, _) -> Method =/= sse. |
25 |
|
|
26 |
2940 |
is_requested_op(#{operation_name := undefined}, _) -> true; |
27 |
:-( |
is_requested_op(#{operation_name := OpName}, {name, _, Name}) -> OpName =:= Name. |
28 |
|
|
29 |
45 |
op_type(undefined) -> query; |
30 |
2895 |
op_type({OpType, _}) -> OpType. |