Packages
potionx
0.6.1
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.3
0.5.2
0.5.1
0.5.0
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.1.1
0.1.0
Potionx is a set of generators and functions that speeds up the process of setting up and deploying a full-stack application that uses Elixir with GraphQL for the server-side component and Vue for the frontend component.
Current section
Files
Jump to
Current section
Files
lib/potionx/schema.ex
defmodule Potionx.Schema do
defmacro __using__(opts) do
opts = Keyword.merge(
[
user_required_exceptions: []
],
opts
)
quote do
@user_required_exceptions unquote(opts[:user_required_exceptions])
use Absinthe.Schema
use Absinthe.Relay.Schema, :modern
import_types Absinthe.Plug.Types
import_types Absinthe.Type.Custom
import_types Potionx.Types
import_types Potionx.Types.JSON
scalar :global_id do
parse fn
%{value: v}, ctx ->
case v do
s when is_binary(s) ->
Absinthe.Relay.Node.from_global_id(s, __MODULE__)
|> case do
{:ok, %{id: id}} -> {:ok, id}
err -> err
end
default ->
{:ok, default}
end
_, _ ->
{:ok, nil}
end
serialize fn input ->
input
end
end
def middleware(middleware, _field, %{identifier: :mutation}) do
Enum.concat([
[
{Potionx.Middleware.UserRequired, [
exceptions: @user_required_exceptions
++ [
:session_renew, :sign_in_provider
]
]},
Potionx.Middleware.ServiceContext
],
middleware,
[
Potionx.Middleware.ChangesetErrors,
Potionx.Middleware.Mutation
]
])
end
def middleware(middleware, _field, %{identifier: :query}) do
[
Potionx.Middleware.ServiceContext
] ++ middleware
end
def middleware(middleware, _field, _object) do
middleware
end
def plugins do
[Absinthe.Middleware.Dataloader] ++ Absinthe.Plugin.defaults()
end
defoverridable([middleware: 3])
end
end
end