lib/schemas/flag.ex

defmodule Flagsmith.Schemas.Flag do
  use TypedEctoSchema

  alias Flagsmith.Schemas.{Environment, Features}

  @moduledoc """
  Ecto schema representing a Flagsmith Flag definition.
  """

  @primary_key {:feature_id, :id, autogenerate: false}
  typed_embedded_schema do
    field(:enabled, :boolean)
    field(:feature_name, :string)
    field(:value, :string)
  end

  @doc false
  @spec from(Environment.FeatureState.t() | Features.FeatureState.t()) :: __MODULE__.t()
  def from(%Environment.FeatureState{
        enabled: enabled,
        feature_state_value: value,
        feature: %Environment.Feature{
          name: name,
          id: id
        }
      }) do
    %__MODULE__{
      enabled: enabled,
      feature_name: name,
      value: value,
      feature_id: id
    }
  end

  def from(%Features.FeatureState{
        enabled: enabled,
        feature_state_value: value,
        feature: %Features.Feature{
          name: name,
          id: id
        }
      }) do
    %__MODULE__{
      enabled: enabled,
      feature_name: name,
      value: value,
      feature_id: id
    }
  end
end