首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用自定义解析器筛选订阅

如何使用自定义解析器筛选订阅
EN

Stack Overflow用户
提问于 2022-08-11 19:17:53
回答 1查看 113关注 0票数 0

我正在开发一个使用AWS AppSync的消息应用程序。

我有以下消息类型..。

代码语言:javascript
复制
type Message
    @model
    @auth(
        rules: [
            { allow: groups, groups: ["externalUser"], operations: [] }
        ]
    ) {
    id: ID!
    channelId: ID!
    senderId: ID!
    channel: Channel @connection(fields: ["channelId"])
    createdAt: AWSDateTime!
    text: String
}

我还订阅了onCreatemessage。我需要过滤的结果,只有渠道,用户在其中。因此,我从权限表中获得了一个通道列表,并将以下内容添加到响应映射模板中。

代码语言:javascript
复制
$extensions.setSubscriptionFilter({
    "filterGroup": [
        {
           "filters" : [
                {
                    "fieldName" : "channelId",
                    "operator" : "in",
                    "value" : $context.result.channelIds
                }
           ]
        }
    ]
})

$util.toJson($messageResult)

而且效果很好。但是,如果用户在5个以上的通道中,我会得到以下错误。

代码语言:javascript
复制
{
    "message": "Connection failed: {"errors":[{"message":"subscription exceeds maximum value limit 5 for operator `in`.","errorCode":400}]}"
}

我是vtl的新手。所以我的问题是,我怎样才能把这个过滤器分解成多个或多个过滤器呢?

EN

回答 1

Stack Overflow用户

发布于 2022-10-12 16:44:41

根据创建增强订阅筛选器,“一个过滤器中的多个规则是使用和逻辑计算的,而滤波器组中的多个过滤器是使用OR逻辑计算的”。

因此,据我所知,您只需要将$context.result.channelIds分成5组,并为每个组向filters数组添加一个对象。

下面是一个VTL模板,它将为您完成此任务:

代码语言:javascript
复制
#set($filters = [])

#foreach($channelId in $context.result.channelIds)
  #set($group = $foreach.index / 5)
  
  #if($filters.size() < $group + 1)
    $util.qr($filters.add({
          "fieldName" : "channelId",
          "operator" : "in",
          "value" : []
      }
    ))
  #end

  $util.qr($filters.get($group).value.add($channelId))
#end

$extensions.setSubscriptionFilter({
    "filterGroup": [
        {
           "filters" : $filters
        }
    ]
})

您可以看到这个模板在这里运行:https://mappingtool.dev/app/appsync/042769cd78b0e928db31212f5ee6aa17

(注意:第15行的映射工具错误是动态填充$filters数组的结果。你可以安全地忽略它们。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73325863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档