lib/ex_teal/resource/record.ex
defmodule ExTeal.Resource.Record do
@moduledoc """
This behaviour is used by the following ExTeal.Resource actions:
* ExTeal.Resource.Show
* ExTeal.Resource.Update
* ExTeal.Resource.Delete
It relies on (and uses):
* ExTeal.Resource.Records
"""
@doc """
Used to get the subject of the current action
Many/most controllers will override this:
def record(%Plug.Conn{assigns: %{user_id: user_id}}, id) do
model()
|> where([p], p.author_id == ^user_id)
|> Repo.get(id)
end
"""
@callback record(Plug.Conn.t(), ExTeal.Resource.id()) ::
Plug.Conn.t() | ExTeal.Resource.record()
defmacro __using__(_) do
quote do
unless ExTeal.Resource.Record in @behaviour do
use ExTeal.Resource.Records
alias ExTeal.Resource.Records
@behaviour ExTeal.Resource.Record
def record(conn, id) do
conn
|> records(__MODULE__)
|> Records.preload(__MODULE__)
|> repo().get(id)
end
defoverridable record: 2
end
end
end
end