Packages
ash_graphql
1.9.0
1.10.0
1.9.4
1.9.3
1.9.2
1.9.1
1.9.0
1.8.5
1.8.4
1.8.3
1.8.2
1.8.1
1.8.0
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.0
1.5.1
1.5.0
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.5
1.0.0-rc.4
retired
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.28.1
0.28.0
0.27.1
0.27.0
0.26.9
0.26.8
0.26.7
0.26.6
0.26.5
0.26.4
0.26.3
0.26.2
0.26.0
0.25.13
0.25.12
0.25.10
0.25.9
0.25.8
0.25.7
0.25.6
0.25.5
0.25.4
0.25.3
0.25.2
0.25.1
0.25.0
0.24.1
0.24.0
0.23.3
0.23.2
0.23.1
0.23.0
0.22.13
0.22.12
0.22.11
0.22.10
0.22.9
0.22.8
0.22.7
0.22.6
0.22.4
0.22.3
0.22.2
0.22.1
0.22.0
0.21.0
retired
0.20.5
0.20.4
0.20.3
0.20.2
0.20.1
0.20.0-rc.3
0.20.0-rc.2
0.20.0-rc.1
0.20.0-rc.0
0.19.0
0.18.0-rc0
0.17.5
0.17.5-rc0
0.17.4
0.17.2
0.17.1
0.17.0
0.16.28
0.16.27
0.16.26
0.16.25
0.16.24
0.16.23
0.16.22
0.16.21
0.16.20
0.16.18-rc5
0.16.18-rc4
0.16.18-rc3
0.16.18-rc2
0.16.18-rc1
0.16.18-rc0
0.16.17
0.16.16
0.16.15
0.16.14
0.16.13
0.16.12
0.16.11
0.16.10
0.16.9
0.16.8
0.16.7
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.10
0.15.9
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.1
0.14.0
0.13.1
0.13.0
0.12.5
0.12.4
0.12.3
0.12.1
0.12.0
0.10.0
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.0
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.3
0.1.2
The extension for building GraphQL APIs with Ash
Current section
Files
Jump to
Current section
Files
lib/domain/verifiers/verify_subscription_pubsub.ex
# SPDX-FileCopyrightText: 2020 ash_graphql contributors <https://github.com/ash-project/ash_graphql/graphs/contributors>
#
# SPDX-License-Identifier: MIT
defmodule AshGraphql.Domain.Verifiers.VerifySubscriptionPubsub do
@moduledoc """
Verifies that pubsub is properly configured for subscriptions at the domain level.
This verifier ensures that:
- If a domain has subscriptions, it either has pubsub configured or all its resources with subscriptions have pubsub configured
- Resources with subscriptions have pubsub available either at the resource level or domain level
"""
use Spark.Dsl.Verifier
def verify(dsl) do
domain_subscriptions = AshGraphql.Domain.Info.subscriptions(dsl)
domain_pubsub = AshGraphql.Domain.Info.subscription_pubsub(dsl)
if is_nil(domain_pubsub) do
already_checked =
if domain_subscriptions != [] do
domain_subscriptions
|> Enum.map(fn subscription ->
resource = subscription.resource
Code.ensure_loaded!(resource)
resource_pubsub = AshGraphql.Resource.Info.subscription_pubsub(resource)
unless resource_pubsub do
raise Spark.Error.DslError,
module: Spark.Dsl.Transformer.get_persisted(resource.spark_dsl_config(), :module),
message:
"Domain subscription for #{inspect(resource)} requires pubsub to be configured either at the domain level or on the resource #{inspect(resource)} itself.",
path: [:graphql, :subscriptions, subscription.name]
end
resource
end)
else
[]
end
dsl
|> Ash.Domain.Info.resources()
|> Kernel.--(already_checked)
|> Enum.each(fn resource ->
Code.ensure_loaded!(resource)
resource_subscriptions = AshGraphql.Resource.Info.subscriptions(resource, dsl)
if resource_subscriptions != [] do
resource_pubsub = AshGraphql.Resource.Info.subscription_pubsub(resource)
unless resource_pubsub do
raise Spark.Error.DslError,
module: Spark.Dsl.Transformer.get_persisted(resource.spark_dsl_config(), :module),
message:
"Resource #{inspect(resource)} has subscriptions but no pubsub module configured. A pubsub module must be specified either at the resource level (in the subscriptions section) or at the domain level (in the domain's graphql subscriptions section).",
path: [:graphql, :subscriptions, :pubsub]
end
end
end)
end
:ok
end
end