У меня есть отношение «многие ко многим» между пользователями и группами в моей схеме, с дополнительным полем enum для уровня отношений.Я могу добавить дополнительное поле отношения в мой набор данных, но получаю ошибку проверки схемы:
"Предоставленный ключевой элемент не соответствует схеме (Сервис: AmazonDynamoDBv2; Код состояния: 400; ОшибкаКод: ValidationException; Идентификатор запроса: 2615V0KG8272IHVENE3DBSBCTVVV4KQNSO5AEMVJF66Q9ASUAAJG) "
Схема:
type Group {
id: ID!
created: AWSDateTime!
createdById: ID!
createdBy: User!
title: String!
description: String
users(first: Int, after: String): GroupUsersConnection
}
enum GroupRoles {
admin
user
}
type GroupUsers {
id: ID!
created: AWSDateTime!
role: GroupRoles!
userId: ID!
groupId: ID!
}
type GroupConnection {
items: [Group]
nextToken: String
}
type GroupUsersConnection {
items: [UserWithRole]
nextToken: String
}
type Mutation {
createGroup(input: CreateGroupInput!): Group
createUser(input: CreateUserInput!): User
createGroupUsers(input: CreateGroupUsersInput!): GroupUsers
}
type Query {
getGroup(id: ID!): Group
listGroups(filter: TableGroupFilterInput, limit: Int, nextToken: String): GroupConnection
getUser(id: ID!): User
listUsers(filter: TableUserFilterInput, limit: Int, nextToken: String): UserConnection
}
input TableGroupFilterInput {
id: TableIDFilterInput
created: TableStringFilterInput
createdById: TableIDFilterInput
title: TableStringFilterInput
description: TableStringFilterInput
}
input TableUserFilterInput {
id: TableIDFilterInput
created: TableStringFilterInput
email: TableStringFilterInput
password: TableStringFilterInput
name: TableStringFilterInput
avatar: TableStringFilterInput
isOnline: TableBooleanFilterInput
}
type User {
id: ID!
created: AWSDateTime!
email: AWSEmail!
password: String!
name: String
avatar: String
isOnline: Boolean!
groups(first: Int, after: String): UserGroupsConnection
}
type UserConnection {
items: [User]
nextToken: String
}
type UserGroupsConnection {
items: [Group]
nextToken: String
}
type UserWithRole {
id: ID!
created: AWSDateTime!
email: AWSEmail!
password: String!
name: String
avatar: String
isOnline: Boolean!
role: GroupRoles!
}
schema {
query: Query
mutation: Mutation
}
как источник данных для 1014 GroupUsersConnection.items
1013 * с разрешением UserTable
1013 *1013* с разрешением *1014* 1013 *1013* 1013 * с разрешением *1014* 1013 *1013* с разрешением *1014* 1013 *1013* с разрешением *1014* 1013 *1013* 1013 * с разрешением для *1014* 1013 *1013* с разрешением *1014* 1013 *1013* 1013:
##--------------------------
## request mapping template
##--------------------------
#if( ${ctx.source.items.isEmpty()} )
{
"version" : "2017-02-28",
"operation" : "Scan",
"consistentRead": true
}
#else
#set($userIds = [])
#foreach($groupUser in ${ctx.source.items})
#set($userIdMap = {})
$util.qr($userIdMap.put("id", $util.dynamodb.toString($groupUser.get("userId"))))
$util.qr($userIds.add($userIdMap))
#end
{
"version" : "2018-05-29",
"operation" : "BatchGetItem",
"tables" : {
"UserTable": {
"keys": $util.toJson($userIds),
"consistentRead": true
}
}
}
#end
##--------------------------
## response mapping template
##--------------------------
#if ( ! ${ctx.result.data} )
$util.toJson([])
#else
#foreach($user in ${ctx.result.data.UserTable})
#set($idx = $foreach.count-1)
#set($role = $ctx.source.items.get(0).get("role"))
$util.qr($user.put("role", $role))
$util.qr($usersWithRoles.add($user))
#end
$util.toJson($ctx.result.data.UserTable)
#end
Это запрос, который я пытаюсь выполнить, с полным результатом:
query ListGroups {
listGroups {
items {
id
title
createdById
createdBy {
name
email
}
users {
items {
id
name
role
}
}
}
}
}
{
"data": {
"listGroups": {
"items": [
{
"id": "72423554-fe02-4644-92e4-4bd2a2702d85",
"title": "My first group",
"createdById": "e626fab4-b099-4736-91f0-dcbf5fc2e47e",
"createdBy": {
"name": "John Doe",
"email": "john@doe.com"
},
"users": {
"items": [
null
]
}
}
]
}
},
"errors": [
{
"path": [
"listGroups",
"items",
0,
"users",
"items",
0,
"role"
],
"data": null,
"errorType": "DynamoDB:AmazonDynamoDBException",
"errorInfo": null,
"locations": [
{
"line": 105,
"column": 11,
"sourceName": null
}
],
"message": "The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: NB3G15C13BUMEQ3OK6VPNVA3LFVV4KQNSO5AEMVJF66Q9ASUAAJG)"
}
]
}