enum PostStatus { PRIVATE DRAFT PUBLISHED } type Post @model { id: ID! title: String! content: String! createdAt: AWSDateTime! updatedAt: AWSDateTime draft: Boolean rating: Float status: PostStatus comments: [Comment] @connection(name: "PostComment") } type Comment @model { id: ID! content: String! createdAt: AWSDateTime! post: Post! @connection(name: "PostComment") } type Article @model @auth(rules: [ { allow: owner, ownerField: "owner", operations: [create, read] }, { allow: groups, groups: ["Admin"] } ]) { id: ID! content: String! createdAt: AWSDateTime! owner: String authorsNotes: String @auth( rules: [ { allow: owner, ownerField: "owner", operations: [update] } ]) } type User @model { id: ID! name: String! following: [UserFollowing] @connection (name: "following") followers: [UserFollowers] @connection (name: "followers") } type UserFollowing @model { id: ID! user: User @connection(name: "following") followingUser: User @connection } type UserFollowers @model { id: ID! user: User @connection(name: "followers") followersUser: User @connection } ## These are examples from https://docs.amplify.aws/cli/graphql-transformer/connection # 1 - Project has a single optional Team type Project1 @model { id: ID! name: String team: Team1 @connection } type Team1 @model { id: ID! name: String! } # 2 - Project with explicit field for team’s id type Project2 @model { id: ID! name: String teamID: ID! team: Team2 @connection(fields: ["teamID"]) } type Team2 @model { id: ID! name: String! } # 3 - Post Comment - keyName reference key directive type Post3 @model { id: ID! title: String! comments: [Comment3] @connection(keyName: "byPost3", fields: ["id"]) } type Comment3 @model @key(name: "byPost3", fields: ["postID", "content"]) { id: ID! postID: ID! content: String! } # 4 - Post Comment bi-directional belongs to type Post4 @model { id: ID! title: String! comments: [Comment4] @connection(keyName: "byPost4", fields: ["id"]) } type Comment4 @model @key(name: "byPost4", fields: ["postID", "content"]) { id: ID! postID: ID! content: String! post: Post4 @connection(fields: ["postID"]) } # 5 Many to Many type Post5 @model { id: ID! title: String! editors: [PostEditor5] @connection(keyName: "byPost5", fields: ["id"]) } # Create a join model type PostEditor5 @model @key(name: "byPost5", fields: ["postID", "editorID"]) @key(name: "byEditor5", fields: ["editorID", "postID"]) { id: ID! postID: ID! editorID: ID! post: Post5! @connection(fields: ["postID"]) editor: User5! @connection(fields: ["editorID"]) } type User5 @model { id: ID! username: String! posts: [PostEditor5] @connection(keyName: "byEditor5", fields: ["id"]) } # This is one of the default schemas provided when you run `amplify add api` # > Do you have an annotated GraphQL schema? `No` # > Choose a schema template: `One-to-many relationship (e.g., “Blogs” with “Posts” and “Comments”)` # 6 - Blog Post Comment type Blog6 @model { id: ID! name: String! posts: [Post6] @connection(keyName: "byBlog", fields: ["id"]) } type Post6 @model @key(name: "byBlog", fields: ["blogID"]) { id: ID! title: String! blogID: ID! blog: Blog6 @connection(fields: ["blogID"]) comments: [Comment6] @connection(keyName: "byPost", fields: ["id"]) } type Comment6 @model @key(name: "byPost", fields: ["postID", "content"]) { id: ID! postID: ID! post: Post6 @connection(fields: ["postID"]) content: String! } # Scalars, Lists, Enums type ScalarContainer @model { id: ID! myString: String myInt: Int myDouble: Float myBool: Boolean myDate: AWSDate myTime: AWSTime myDateTime: AWSDateTime myTimeStamp: AWSTimestamp myEmail: AWSEmail myJSON: AWSJSON myPhone: AWSPhone myURL: AWSURL myIPAddress: AWSIPAddress } type ListIntContainer @model { id: ID! test: Int! nullableInt: Int intList: [Int!]! intNullableList: [Int!] nullableIntList: [Int]! nullableIntNullableList: [Int] } type ListStringContainer @model { id: ID! test: String! nullableString: String stringList: [String!]! stringNullableList: [String!] nullableStringList: [String]! nullableStringNullableList: [String] } type EnumTestModel @model { id: ID! enumVal: TestEnum! nullableEnumVal: TestEnum enumList: [TestEnum!]! enumNullableList: [TestEnum!] nullableEnumList: [TestEnum]! nullableEnumNullableList: [TestEnum] } enum TestEnum { VALUE_ONE VALUE_TWO } type NestedTypeTestModel @model { id: ID! nestedVal: Nested! nullableNestedVal: Nested nestedList: [Nested!]! nestedNullableList: [Nested!] nullableNestedList: [Nested]! nullableNestedNullableList: [Nested] } type Nested { valueOne: Int valueTwo: String }