如何为 "most likes" 的 Appsync 创建 GraphQl 解析器

How to create a GraphQl resolver for Appsync for "most likes"

我将 AWS Appsync 与 DynamoDB 用作数据源。我有 2 个表,一个用于照片,一个用于喜欢。在 Appsync 解析器中,我只想 return 点赞次数超过 5 次的照片。我怎样才能在 Appsync

中实现这个

架构

type Photo {
    id: ID!
    likes: [LikedPhoto]
}

type LikedPhoto {
    id: ID!
    username: String!
    photoId: String!
}

查询

type Query {
    listPhotos(filter: PhotoFilterInput, limit: Int, nextToken: String): PhotoConnection
}

照片解析器

数据来源:PhotoTable

{
  "version": "2017-02-28",
  "operation": "Scan",
  "filter": #if($context.args.filter) $util.transform.toDynamoDBFilterExpression($ctx.args.filter) #else null #end,
  "limit": $util.defaultIfNull($ctx.args.limit, 20),
  "nextToken": $util.toJson($util.defaultIfNullOrEmpty($ctx.args.nextToken, null)),
}

喜欢解析器

数据来源:LikesTable

{
    "version": "2017-02-28",
    "operation": "Query",
    "index": "photoId-index",
    "query": {
        "expression": "photoId = :photoId",
        "expressionValues": {
            ":photoId": {
                "S": "$context.source.id"
            }
        }
    }
}

我如何为点赞或照片编写解析器,以仅显示点赞次数超过 5 次的照片。

如何将您的架构设计成 document-based 只有 PhotoTable.
这样您就可以轻松地使用 totalLike.

过滤照片
type Photo {
  id: ID!
  likedUsername: [String]
  totalLike: Int
}

// QUERY RESOLVER
{
    "version" : "2017-02-28",
    "operation" : "Scan",
    "filter" : {
        "expression": "totalLike > :totalLike",
        "expressionValues": {
            ":totalLike": {
                "N": 5
            }
        }
    }
}