Как сделать запрос на все сообщения следующих пользователей в AWS AppSync - PullRequest
0 голосов
/ 03 октября 2018

У меня есть приложение AWS Appsync, использующее DynamoDB в качестве бэкэнда.У меня есть таблица для сообщений, и у каждого сообщения есть поле имени пользователя исходного автора.Я нахожусь в ситуации, когда я хочу запросить просмотр всех постов авторов, за которыми они следят.

Каждый пользователь может иметь много сообщений, и каждый пользователь может следовать за многими пользователями.

type Post {
    id: ID!
    username: String
    title: String
    content: String
}

type User{
     username: String
     following: [String]
}

Как я должен структурировать таблицы в DynamoDB и решатели / схемы AppSync в AppSync для этого.

1 Ответ

0 голосов
/ 03 октября 2018
type User {
    username: String! ## Primary key
    posts: [Post]
    following: [Following]
}
type Following {
    follower: String! ## Primary key
    username: String! ## Sort key
    posts: [Post]
}
type Post {
    username: String! ## Primary key
    postID: ID! 
    title: String
    content: String
}
type Query {
    getPostsByUsername(username: String!): User
}
schema {
    query: Query
}

User.posts resolver:

{
    "version": "2017-02-28",
    "operation": "Query",
    "query": {
        "expression": "username = :username",
        "expressionValues": {
            ":username": $util.dynamodb.toDynamoDBJson($context.source.username)
        }
    }
}

$util.toJson($ctx.result.items)

User.following resolver

{
    "version": "2017-02-28",
    "operation": "Query",
    "query": {
        "expression": "follower = :follower",
        "expressionValues": {
            ":follower": $util.dynamodb.toDynamoDBJson($context.source.username)
        }
    }
}

$util.toJson($ctx.result.items)

Подписан.сообщения resolver

{
    "version": "2017-02-28",
    "operation": "Query",
    "query": {
        "expression": "username = :username",
        "expressionValues": {
            ":username": $util.dynamodb.toDynamoDBJson($context.source.username)
        }
    }
}

$util.toJson($ctx.result.items)

Query.getPostsByUsername resolver

{
    "version": "2017-02-28",
    "operation": "GetItem",
    "key": {
        "username": $util.dynamodb.toDynamoDBJson($ctx.args.username),
    }
}

$util.toJson($ctx.result)

Тестирование

enter image description here

UserTable

enter image description here

PostTable

enter image description here

FollowTable

enter image description here

Теперь мы можем запросить всесообщения от имени пользователя и сообщений всех друзей.
Надеюсь, что это полезно:)

...