defmodule Rivet.Ident.UserIdent.Lib do alias Rivet.Ident.User alias Rivet.Ident.UserIdent use Rivet.Ecto.Collection.Context, model: UserIdent def get(origin, key) do UserIdent.one(origin: origin, ident: key) |> case do {:error, _} -> :error found -> # touch the ident from(i in UserIdent, where: i.origin == ^origin and i.ident == ^key) |> UserIdent.update_all(set: [updated_at: DateTime.utc_now()]) found end end def put(%User{id: id}, origin, key) when is_binary(origin) and is_binary(key) do %{user_id: id, origin: origin, ident: key} |> UserIdent.build() |> UserIdent.insert(on_conflict: :replace_all, conflict_target: [:origin, :ident]) end end