Как создать распознаватель GraphQl для Appsync для "большинства лайков" - PullRequest
0 голосов
/ 29 сентября 2018

Я использую AWS Appsync с DynamoDB в качестве источника данных.У меня есть 2 таблицы, одна для фотографий и одна для лайков.В решателе Appsync я хочу вернуть только фотографии с более чем 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
}

Photo Resolver

Источник данных: 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)),
}

Likes Resolver

Источник данных: LikesTable

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

HowМогу ли я написать распознаватель для лайков или фотографий, чтобы показывать только фотографии с более чем 5 лайками.

1 Ответ

0 голосов
/ 29 сентября 2018

Как насчет разработки вашей схемы, например, 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
            }
        }
    }
}
...