Packages
ash_oban
0.8.8
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0-rc.1
0.8.0-rc.0
0.7.2
0.7.1
0.7.0
0.6.0
0.5.1
0.5.0
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.6
0.2.5
0.2.4
0.2.3
0.2.3-rc.1
0.2.3-rc.0
0.2.2
0.2.1
0.2.0
0.1.14
0.1.13
0.1.12
0.1.11
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
The extension for integrating Ash resources with Oban.
Current section
Files
Jump to
Current section
Files
lib/verifiers/verify_chunks.ex
# SPDX-FileCopyrightText: 2023 ash_oban contributors <https://github.com/ash-project/ash_oban/graphs/contributors>
#
# SPDX-License-Identifier: MIT
defmodule AshOban.Verifiers.VerifyChunks do
@moduledoc "Validates chunk configuration on triggers."
use Spark.Dsl.Verifier
def verify(dsl_state) do
module = Spark.Dsl.Verifier.get_persisted(dsl_state, :module)
dsl_state
|> AshOban.Info.oban_triggers()
|> Enum.filter(& &1.chunks)
|> Enum.reduce_while(:ok, fn trigger, _acc ->
with :ok <- verify_pro(module, trigger),
:ok <- verify_action_type(module, trigger, dsl_state),
:ok <- verify_no_read_metadata(module, trigger) do
{:cont, :ok}
else
{:error, error} -> {:halt, {:error, error}}
end
end)
end
defp verify_pro(module, trigger) do
if AshOban.Info.pro?() do
:ok
else
{:error,
Spark.Error.DslError.exception(
module: module,
path: [:oban, :triggers, trigger.name, :chunks],
message: """
Chunks require Oban Pro. Set `config :ash_oban, pro?: true` to use chunk workers.
"""
)}
end
end
defp verify_action_type(module, trigger, dsl_state) do
action = Ash.Resource.Info.action(dsl_state, trigger.action)
if action && action.type == :action do
{:error,
Spark.Error.DslError.exception(
module: module,
path: [:oban, :triggers, trigger.name, :chunks],
message: """
Chunks cannot be used with generic actions. Chunks require update or destroy actions
that operate on records with primary keys.
"""
)}
else
:ok
end
end
defp verify_no_read_metadata(module, trigger) do
if trigger.read_metadata do
{:error,
Spark.Error.DslError.exception(
module: module,
path: [:oban, :triggers, trigger.name, :chunks],
message: """
Chunks cannot be used with `read_metadata`. Per-record metadata is incompatible
with bulk batch operations.
"""
)}
else
:ok
end
end
end