Я хочу сделать что-то, казалось бы, такое простое, но я немного растерялся относительно того, как это сделать: у меня уже есть таблица с информацией о пользователе. Вот схема:
type Users @model {
id: ID!
userName: String
firstname: String
weblink: String
email: String
mobileNum: String
.
.
.
}
//**Here's my current Query.js**
export const getUsers = `query GetUsers($id: ID!) {
getUsers(id: $id) {
id
userName
firstname
weblink
email
.
.
.
}
}
`;
Эта таблица заполняется в DynamoDB, когда я проверяю консоль AWS. Что мне нужно, чтобы иметь возможность получить идентификатор из таблицы, используя имя пользователя (а не наоборот). Идентификатор генерируется при создании createUser () и используется в моем приложении для получения всей информации моего пользователя. Однако когда пользователь входит в новый телефон, этот идентификатор больше не доступен. Поэтому, когда они входят через Cognito, я знаю имя пользователя и все, что мне нужно сделать, это получить этот идентификатор. Поскольку существует только один уникальный userName , он должен возвращать только один id
. Вот что я пока думаю: используйте GSI (глобальный вторичный индекс). Поэтому измените мою схему на:
type Users @model
@key(
name: "ByUsername"
fields: ["userName"]
queryField: "getIdFromUserName"
)
{
id: ID!
userName: String
firstname: String
weblink: String
email: String
mobileNum: String
.
.
.
}
Затем вызовите в моем приложении:
const data = await API.graphql(graphqlOperation(getIdFromUserName, { userName }));
5 вопросов:
1) Есть ли более простой способ, чем GSI?
2) Так вы добавляете GSI? Или это более надежно сделать в консоли AWS?
3) Как должен выглядеть мой Запрос. js тогда?
4) Делать мне нужно сделать собственный распознаватель, или этого достаточно?
5) Я что-то пропустил, или я могу просто
amplify push ?