научить функцию работать с обееми типами?
По хорошему, в твоем контроллере, ты должен валидировать то, что приходит. Для этого мы переиспользовали ecto схемы с ченджсетами. На вход мапа со ключами строками, на выходе структура с ключами атомами. К примеру defmodule OrkestroWeb.Params.CreateDelivery do @moduledoc false use Ecto.Schema import Ecto.Changeset use Params.Schema alias Orkestro.Core.Enums.DeliveryCreationReason.Ecto, as: DeliveryCreationReason alias Orkestro.Orders.{Address, DeliverySchedule, Note, Parcel} @required ~w(order_id reason schedule parcel pickup dropoff)a embedded_schema do field(:order_id, :string) field(:source_delivery_id, :string) field(:reason, DeliveryCreationReason) embeds_one(:schedule, DeliverySchedule) embeds_one(:parcel, Parcel) embeds_one(:pickup, Address) embeds_one(:dropoff, Address) embeds_many(:notes, Note) end def to_valid_attrs(%{} = params) do params |> from() |> to_map() end @spec to_map(Ecto.Changeset.t()) :: {:ok, map()} | {:error, Ecto.Changeset.t()} defp to_map(%Ecto.Changeset{valid?: true} = params), do: {:ok, Params.to_map(params)} defp to_map(%Ecto.Changeset{} = changeset), do: {:error, changeset} end
Обсуждают сегодня