241 lines
4.8 KiB
GraphQL
241 lines
4.8 KiB
GraphQL
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
|
||
}
|