Получить 'id' из записи строки в DynamoDB / AppSyn c? - PullRequest
0 голосов
/ 19 апреля 2020

Я хочу сделать что-то, казалось бы, такое простое, но я немного растерялся относительно того, как это сделать: у меня уже есть таблица с информацией о пользователе. Вот схема:

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  ?
...