philomena/lib/philomena/repo.ex
2019-11-18 22:38:22 -05:00

26 lines
586 B
Elixir

defmodule Philomena.Repo do
alias Ecto.Multi
use Ecto.Repo,
otp_app: :philomena,
adapter: Ecto.Adapters.Postgres
use Scrivener, page_size: 250
@levels %{
read_committed: "READ COMMITTED",
repeatable_read: "REPEATABLE READ",
serializable: "SERIALIZABLE"
}
def isolated_transaction(%Multi{} = multi, level) do
Multi.append(
Multi.new |> Multi.run(:isolate, fn repo, _chg ->
repo.query!("SET TRANSACTION ISOLATION LEVEL #{@levels[level]}")
{:ok, nil}
end),
multi
)
|> Philomena.Repo.transaction()
end
end