defmodule PresenceEx do @moduledoc false # credo:disable-for-this-file Credo.Check.Refactor.PipeChainStart import Ecto.Query alias PresenceEx.Repo alias PresenceEx.Schemas.Status alias PresenceEx.Utils def insert(account, resource, node, status, features) do %Status{} |> Status.changeset(%{ account: account, resource: resource, node: node, status: status, features: features }) |> Repo.insert(prefix: Utils.prefix(account)) end def update(account, resource, t) do from(Status, where: [account: ^account, resource: ^resource]) |> Repo.update_all([set: t], prefix: Utils.prefix(account)) end def upsert(account, resource, node, status, features) do %Status{} |> Status.changeset(%{ account: account, resource: resource, node: node, status: status, features: features }) |> Repo.insert( prefix: Utils.prefix(account), on_conflict: {:replace, [:node, :status, :features]}, conflict_target: [:account, :resource] ) end def get(account, resource) do from(Status, where: [account: ^account, resource: ^resource]) |> Repo.all(prefix: Utils.prefix(account)) end def get_by_user(account) do from(Status, where: [account: ^account]) |> Repo.all(prefix: Utils.prefix(account)) end def get_by_node(node) do query = from(Status, where: [node: ^node]) Utils.all_schema_ids() |> Enum.flat_map(&Repo.all(query, prefix: Utils.prefix(&1))) end def delete(account, resource) do from(Status, where: [account: ^account, resource: ^resource]) |> Repo.delete_all(prefix: Utils.prefix(account)) end def delete_by_user(account) do from(Status, where: [account: ^account]) |> Repo.delete_all(prefix: Utils.prefix(account)) end def delete_by_node(node) do query = from(Status, where: [node: ^node]) Utils.all_schema_ids() |> Enum.map(&Repo.delete_all(query, prefix: Utils.prefix(&1))) end def start(_, _) do :ok end end