Current section
Files
Jump to
Current section
Files
lib/presence_ex/schemas/status.ex
defmodule PresenceEx.Schemas.Status do
@moduledoc false
use Ecto.Schema
import Ecto.Changeset
@primary_key false
schema "statuses" do
field(:account, :string, primary_key: true)
field(:resource, :string, primary_key: true)
field(:node, :string)
field(:status, :string)
field(:features, :map)
end
def changeset(struct, params) do
struct
|> change(params)
|> validate_inclusion(:status, ["online", "away", "offline"])
|> validate_change(:features, fn :features, f -> validate_features(f) end)
end
def validate_features(features) do
if Enum.all?(features, fn {k, v} ->
is_binary(k) and
(is_binary(v) or is_boolean(v) or is_integer(v) or
(is_list(v) and Enum.all?(v, &is_binary/1)))
end) do
[]
else
[features: "are not valid"]
end
end
end