Ash FrameworkAF
Ash Framework8mo ago
12 replies
jeroen11dijk

Error: `key :manual not found in: nil` with create_query using graphql

So I got this simple resource:

defmodule Zelo.Planner.PlanResult do
  @moduledoc false
  use Ash.Resource,
    domain: Zelo.Planner,
    authorizers: [Ash.Policy.Authorizer],
    extensions: [
      AshJason.Resource,
      AshGraphql.Resource,
      AshJsonApi.Resource
    ]

  code_interface do
    domain Cvs.Planner
    define :create, action: :create
    define :run_planner, action: :run_planner
  end

  actions do
    create :create do
      primary? true
      accept :*

      argument :routes, {:array, :map}, allow_nil?: false
      change manage_relationship(:routes, type: :direct_control)
    end

    create :run_planner do
      manual Zelo.Planner.ManualPlanCreate
    end
  end

  policies do
    policy always() do
      authorize_if always()
    end
  end

  graphql do
    type :plan_result

    mutations do
      create :run_planner, :run_planner
    end
  end

  json_api do
    type "plan_result"
  end

  attributes do
    uuid_primary_key :id
  end

  relationships do
    has_many :routes, Zelo.Planner.RouteResult do
      public? true
    end
  end
end


defmodule Zelo.Planner.ManualPlanCreate do
  @moduledoc false
  use Ash.Resource.ManualCreate

  alias Ash.Changeset
  alias Zelo.Planner.PlanResult

  @impl true
  def create(changeset, opts, context) do
    {:ok,
     %PlanResult{
       id: "clappen",
       routes: [
         %{
           vehicle_id: "vehicle-123",
           distance: 1234,
           duration: 1234,
           polyline: "SDFGSDG",
           projected_departure_time: DateTime.utc_now(),
           projected_end_time: DateTime.utc_now()
         }
       ]
     }}
  end
end


And using graphql I query

mutation {
  runPlanner {
    result {
      id
      routes {
        vehicleId
      }
    }
  }
}


And this gives me the following stacktrace:
Was this page helpful?