Amazon web services 如何定义GraphQL.schema

Amazon web services 如何定义GraphQL.schema,amazon-web-services,graphql,amplify,Amazon Web Services,Graphql,Amplify,我试图使用AWS Amplify创建一个无服务器的react应用程序,并试图找出如何定义 假设使用DynamoDB,基于Graphql的API的数据模型 应如何为以下内容定义Graphql模式:跟踪 针对不同项目类型的运动员的培训课程(培训课程)。每个事件类型定义 船员人数以及舵手是否在场(以划船为例)。实际上有些 会话可能包括cox,因此它应该是一个标志,以指示它是否是cox会话 每次培训课程都会记录课程类型、机组成员名单和 任何测试的结果 enum EventType { EIGHT

我试图使用AWS Amplify创建一个无服务器的react应用程序,并试图找出如何定义 假设使用DynamoDB,基于Graphql的API的数据模型

应如何为以下内容定义Graphql模式:跟踪 针对不同项目类型的运动员的培训课程(培训课程)。每个事件类型定义 船员人数以及舵手是否在场(以划船为例)。实际上有些 会话可能包括cox,因此它应该是一个标志,以指示它是否是cox会话

每次培训课程都会记录课程类型、机组成员名单和 任何测试的结果

enum EventType {
    EIGHT
    FOUR
    FOUR_LW
    PAIR
    SCULL_QUAD
    SCULL_DOUBLE
    SCULL_SINGLE
}

enum TestAttrib {
    DISTANCE
    TIME
    SPEED
    DIRECTION
}

var eventParms = [
    { id: "1", type: "EIGHT", crewNumber: 8, cox: True },
    { id: "2", type: "FOUR", crewNumber: 4, cox: False },
    { id: "3", type: "FOUR_LW", crewNumber: 4, cox: False },
    { id: "4", type: "PAIR", crewNumber: 2, cox: False },
    { id: "5", type: "SCULL_QUAD", crewNumber: 4, cox: False },
    { id: "6", type: "SCULL_DOUBLE", crewNumber: 2, cox: False },
    { id: "7", type: "SCULL_SINGLE", crewNumber: 1, cox: False }
    ];

type Member @model  
    @key(name: "byFirstname", fields: ["firstname", "id"], queryField: "memberByFirstname")
    @key(name: "byLastname", fields: ["lastname", "id"], queryField: "memberByLastname")
    @key(name: "byDOB", fields: ["dob", "id"], queryField: "memberByDOB")
    @key(name: "byAgeGroup", fields: ["ageGroup", "id"], queryField: "memberByDOB")
{
    id: ID!
    email: String!
    firstname: String!
    lastname: String!
    dob: Date!
    ageGroup: String!
}

# record each session with some attributes
type Session @model 
@auth(rules: [{ allow: owner, operations: [create] }])
@key(name: "byMemberByDate", fields[""])
{
    id: ID!
    createdById: Member!
    eventType: EventType!
    date: String!
    crew: [Member]!
    cox: Member
    testResults: [Test]!
}

type Test @model {
    number: Int!
    result: [TestAttribute]!
}

type TestAttribute @model {
    type: TestAttrib!
    value: String!
}

# Sample data shown below

var members = [
    {"id": "001",
    "email": "a.andersen@gmail.com",
    "firstname": "Andrew",
    "lastname": "Andersen",
    "dob": "2001-01-01",
    "ageGroup": "UNDER21"
    },
    {"id": "002",
    "email": "b.barlow@gmail.com",
    "firstname": "Barry",
    "lastname": "Barlow",
    "dob": "2001-02-01",
    "ageGroup": "UNDER21"
    },
    {"id": "003",
    "email": "c.christensen@gmail.com",
    "firstname": "Chris",
    "lastname": "Christensen",
    "dob": "2001-04-01",
    "ageGroup": "UNDER21"
    },
    {"id": "004",
    "email": "d.donaldson@gmail.com",
    "firstname": "David",
    "lastname": "Donaldson",
    "dob": "2001-05-01",
    "ageGroup": "UNDER21"
    },

]

var sessions = [
    {
        "id": "000001",
        "createdById": "",
        "eventType": "FOUR",
        "date": "2020-09-01 16:00:00",
        "crew": ["001", "002", "003", "004"],
        "cox": null,
        "testResults": [
            { "number": 1,
               "result": [
                    {"attrib": "DIRECTION", "value": "Up"}, 
                    {"attrib": "DISTANCE", "value": "1000"},
                    {"attrib": "TIME", "value": "00:01:45"}
                ]
            },
            { "number": 2,
               "result": [
                    {"attrib": "DIRECTION", "value": "Down"}, 
                    {"attrib": "DISTANCE", "value": "1000"},
                    {"attrib": "TIME", "value": "00:01:35"}
                ]
            }
            ]
    },
    {
        "id": "000002",
        "createdById": "",
        "eventType": "FOUR",
        "date": "2020-09-02 16:00:00",
        "crew": ["003", "002", "001", "004"],
        "cox": null,
        "testResults": [
            { "number": 1,
               "result": [
                    {"attrib": "DIRECTION", "value": "Up"}, 
                    {"attrib": "DISTANCE", "value": "1000"},
                    {"attrib": "TIME", "value": "00:01:49"}
                ]
            },
            { "number": 2,
               "result": [
                    {"attrib": "DIRECTION", "value": "Down"}, 
                    {"attrib": "DISTANCE", "value": "1000"},
                    {"attrib": "TIME", "value": "00:01:36"}
                ]
            }
            ]
    }
]
所需的API包括:

成员-积垢 会议-积垢

理想情况下,我不希望每个嵌套数组都有单独的表,例如测试结果和测试属性值。它们可以作为会话文档的一部分存储,但我仍然希望使用定义的模型对象访问它们——如果可能的话

当与Amplify结合使用时,graphql.schema应该包含什么来实现这一点