defmodule Statestores.Adapters.MSSQLSnapshotAdapter do @moduledoc """ Implements the behavior defined in `Statestores.Adapters.SnapshotBehaviour` for MSSQL databases. """ use Statestores.Adapters.SnapshotBehaviour use Ecto.Repo, otp_app: :spawn_statestores, adapter: Ecto.Adapters.Tds alias Statestores.Schemas.{Snapshot, ValueObjectSchema} def get_by_key(id), do: get_by(Snapshot, id: id) def save(%Snapshot{id: id} = event) do %Snapshot{} |> Snapshot.changeset(ValueObjectSchema.to_map(event)) |> insert() |> case do {:ok, event} -> {:ok, event} {:error, changeset} -> {:error, changeset} other -> {:error, other} end rescue _e -> get_by(Snapshot, id: id) |> Snapshot.changeset(ValueObjectSchema.to_map(event)) |> update!() |> case do {:ok, event} -> {:ok, event} {:error, changeset} -> {:error, changeset} other -> {:error, other} end end def default_port, do: "1433" end