defmodule Flagsmith.Schemas.Environment.MultivariateFeatureStateValue do
use TypedEctoSchema
import Ecto.Changeset
alias Flagsmith.Schemas.Environment
@moduledoc """
Ecto schema representing a Flagsmith environment multivariate feature state value.
"""
@primary_key {:id, :id, autogenerate: false}
typed_embedded_schema do
field(:percentage_allocation, :float)
field(:mv_fs_value_uuid, :binary_id)
embeds_one(:multivariate_feature_option, Environment.MultivariateFeatureOption)
end
@doc false
@spec changeset(map()) :: Ecto.Changeset.t()
@spec changeset(__MODULE__.t(), map()) :: Ecto.Changeset.t()
def changeset(struct \\ %__MODULE__{}, params) do
struct
|> cast(params, [:id, :percentage_allocation, :mv_fs_value_uuid])
|> cast_embed(:multivariate_feature_option)
end
@doc false
@spec from_response(element :: map() | list(map())) :: __MODULE__.t() | any()
def from_response(element) when is_map(element) do
element
|> changeset()
|> apply_changes()
end
def from_response(elements) when is_list(elements) do
Enum.map(elements, fn element ->
element
|> changeset()
|> apply_changes()
end)
end
def from_response(element), do: element
end