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
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