如何使用 AWS AppSync / DynamoDB (React Native) 创建一个具有 Union 作为字段的 Mutation

Tam*_*fer 5 react-native aws-appsync aws-amplify

我已经弄清楚如何创建新用户并将基本字段写入 DynamoDB,例如用户名(字符串),但我找不到将 Union 作为输入之一的方法。

在我的示例中,当用户注册时,我想知道正在使用该应用程序的用户类型:要么是教师,要么是学生(应用程序将使用此信息根据用户类型显示不同的 UI)

我还没有找到任何这样的例子,所以也许这是不可能的?有人这样做过吗?有谁知道你能做到吗?或者也许我不应该试图把这个作为一个联盟来拯救……

我正在使用react-native、AWS Amplify、AppSync、Cognito。

我的架构:

type User
  id: ID!
  name: String!
  userTypes: [UserType]
}

union UserType = Teacher | Student
Run Code Online (Sandbox Code Playgroud)

代码生成突变:

const registerUser = `mutation RegisterUser($input: CreateUserInput!) {
  registerUser(input: $input) {
    id
    name
    createdAt
    updatedAt
    userTypes {
      ... on Teacher {
        id
        name
        subjectsTaught
      }
      ... on Student {
        id
        name
        lessons
      }
    }
  }
}
`;
Run Code Online (Sandbox Code Playgroud)

然后是实际的 React Native 部分:

try {
            await API.graphql(graphqlOperation(registerUser,
                { input: { name: "Tamsyn", userTypes: { Student } } } ));
                console.log('created user');
            } catch (err) {
                console.log('error creating user', err);
            }
Run Code Online (Sandbox Code Playgroud)

Tam*_*fer 1

我可以使用这样的枚举:

type User
  id: ID!
  name: String!
  userType: [UserType]
}

enum UserType {
  Teacher
  Student
}
Run Code Online (Sandbox Code Playgroud)

然后,当用户注册时,如果他们选择“老师”,我可以调用此方法:

await API.graphql(graphqlOperation(createUser, { input: { name: name, userType: 'Teacher' } }));
Run Code Online (Sandbox Code Playgroud)

或者如果用户选择学生我可以打电话......

await API.graphql(graphqlOperation(createUser, { input: { name: name, userType: 'Student' } }));
Run Code Online (Sandbox Code Playgroud)

然后,当用户在应用程序中时,如果我想找出要显示的个人资料:

   if (user.userType === 'Teacher') {
       navigation.navigate('TeacherProfile');
     } else if (user.userType === 'Student') {
       navigation.navigate('StudentProfile');
     }

Run Code Online (Sandbox Code Playgroud)