| defmodule Plausible.Funnel.Step do | |
| @moduledoc """ | |
| This module defines the database schema for a single Funnel step. | |
| See: `Plausible.Funnel` for more information. | |
| """ | |
| use Ecto.Schema | |
| import Ecto.Changeset | |
| @type t() :: %__MODULE__{} | |
| schema "funnel_steps" do | |
| field :step_order, :integer | |
| belongs_to :funnel, Plausible.Funnel | |
| belongs_to :goal, Plausible.Goal | |
| timestamps() | |
| end | |
| def changeset(step, goal_or_attrs \\ %{}) | |
| def changeset(step, %Plausible.Goal{id: goal_id}) do | |
| changeset(step, %{goal_id: goal_id}) | |
| end | |
| def changeset(step, attrs) do | |
| step | |
| |> cast(attrs, [:goal_id]) | |
| |> cast_assoc(:goal) | |
| |> validate_required([:goal_id]) | |
| |> unique_constraint(:goal, | |
| name: :funnel_steps_goal_id_funnel_id_index | |
| ) | |
| end | |
| end | |