Packages
potionx
0.8.9
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/auth/auth_identity_service.ex
defmodule Potionx.Auth.IdentityService do
alias Potionx.Context.Service
@callback count(Potionx.Context.Service.t()) :: {:ok, struct()} | {:error, map()}
@callback create(Potionx.Context.Service.t()) :: {:ok, struct()} | {:error, map()}
@callback delete(Potionx.Context.Service.t()) :: {:ok, struct()} | {:error, map()}
@callback one(Potionx.Context.Service.t()) :: struct()
defmacro __using__(opts) do
if !Keyword.get(opts, :repo) do
raise "Potionx.Auth.SessionService requires a repo"
end
if !Keyword.get(opts, :identity_schema) do
raise "Potionx.Auth.SessionService requires a session schema"
end
quote do
@behaviour Potionx.Auth.IdentityService
@identity_schema unquote(opts[:identity_schema])
@repo unquote(opts[:repo])
import Ecto.Query
def count(%Service{} = ctx) do
from(item in query(ctx))
|> select([i], count(i.id))
|> exclude(:order_by)
|> @repo.one!
end
def create(%Service{changes: changes} = srv) do
struct(@identity_schema, %{})
|> @identity_schema.changeset(changes)
|> @repo.insert
end
def delete(%Service{} = ctx) do
query(ctx)
|> @repo.one
|> case do
nil -> {:error, "not_found"}
entry ->
entry
|> @repo.delete
end
end
def one(%Service{} = ctx) do
query(ctx)
|> @repo.one
end
def query(%Service{} = ctx) do
@identity_schema
|> where(
^(
ctx.filters
|> Map.to_list
)
)
|> order_by([desc: :id])
end
def query(q, _args), do: q
defoverridable(Potionx.Auth.IdentityService)
end
end
end