33 lines
672 B
Elixir
33 lines
672 B
Elixir
defmodule ElixirAi.Data do
|
|
defmacro __using__(_opts) do
|
|
quote do
|
|
import ElixirAi.Data
|
|
require Logger
|
|
end
|
|
end
|
|
|
|
defmacro broadcast_error(opts, do: block) do
|
|
topic = Keyword.get(opts, :topic)
|
|
build_with_db(block, topic)
|
|
end
|
|
|
|
defp build_with_db(block, topic) do
|
|
quote do
|
|
try do
|
|
unquote(block)
|
|
rescue
|
|
exception ->
|
|
Logger.error("Database error: #{Exception.message(exception)}")
|
|
|
|
Phoenix.PubSub.broadcast(
|
|
ElixirAi.PubSub,
|
|
unquote(topic),
|
|
{:db_error, Exception.message(exception)}
|
|
)
|
|
|
|
{:error, :db_error}
|
|
end
|
|
end
|
|
end
|
|
end
|