defmodule Statestores.Adapters.PostgresSnapshotAdapter do
@moduledoc """
Implements the behavior defined in `Statestores.Adapters.SnapshotBehaviour` for Postgres databases.
"""
use Statestores.Adapters.SnapshotBehaviour
use Ecto.Repo,
otp_app: :spawn_statestores,
adapter: Ecto.Adapters.Postgres
alias Statestores.Schemas.{Snapshot, ValueObjectSchema}
def get_by_key(id), do: get_by(Snapshot, id: id)
def get_by_key_and_revision(_id, _revision), do: raise("Not implemented")
def get_all_snapshots_by_key(_id), do: raise("Not implemented")
def get_snapshots_by_interval(_id, _time_start, _time_end), do: raise("Not implemented")
def save(
%Snapshot{
system: system,
actor: actor,
status: status,
node: node,
revision: revision,
tags: tags,
data_type: type,
data: data
} = event
) do
%Snapshot{}
|> Snapshot.changeset(ValueObjectSchema.to_map(event))
|> insert_or_update(
on_conflict: [
set: [
system: system,
actor: actor,
status: status,
node: node,
revision: revision,
tags: tags,
data_type: type,
data: data,
updated_at: DateTime.utc_now()
]
],
conflict_target: :id
)
|> case do
{:ok, event} ->
{:ok, event}
{:error, changeset} ->
{:error, changeset}
other ->
{:error, other}
end
end
def default_port, do: "5432"
end