input AMPLIFY { globalAuthRule: AuthRule = { allow: public } } # FOR TESTING ONLY! # Has One (Implicit Field) type Project1V2 @model @auth(rules: [{allow: public}]) { id: ID! name: String team: Team1V2 @hasOne } type Team1V2 @model @auth(rules: [{allow: public}]) { id: ID! name: String! } # Has One (Explicit Field) type Project2V2 @model @auth(rules: [{allow: public}]) { id: ID! name: String teamID: ID! team: Team2V2 @hasOne(fields: ["teamID"]) } type Team2V2 @model @auth(rules: [{allow: public}]) { id: ID! name: String! } # 6 Implicit Has Many Relationship type Post3aV2 @model { id: ID! title: String! comments: [Comment3aV2] @hasMany } type Comment3aV2 @model { id: ID! content: String! } # 7 Explicit Has Many Relationship type Post3V2 @model @auth(rules: [{allow: public}]) { id: ID! title: String! comments: [Comment3V2] @hasMany(indexName: "byPost3", fields: ["id"]) } type Comment3V2 @model @auth(rules: [{allow: public}]) { id: ID! postID: ID! @index(name: "byPost3", sortKeyFields: ["content"]) content: String! } # Belongs to (Implicit, Explicit, bi-directional) # 9 Implicit Belongs to Relationship type Project4aV2 @model { id: ID! name: String team: Team4aV2 @hasOne } type Team4aV2 @model { id: ID! name: String! project: Project4aV2 @belongsTo } # 10 Explicit Belongs to Relationship type Project4bV2 @model { id: ID! name: String team: Team4bV2 @hasOne } type Team4bV2 @model { id: ID! name: String! projectID: ID project: Project4bV2 @belongsTo(fields: ["projectID"]) } # 11 Explicit Bi-Directional Belongs to Relationship type Post4V2 @model @auth(rules: [{allow: public}]) { id: ID! title: String! comments: [Comment4V2] @hasMany(indexName: "byPost4", fields: ["id"]) } type Comment4V2 @model @auth(rules: [{allow: public}]) { id: ID! postID: ID! @index(name: "byPost4", sortKeyFields: ["content"]) content: String! post: Post4V2 @belongsTo(fields: ["postID"]) } # 8 Many to Many relationship type Post5V2 @model { id: ID! title: String! editors: [User5V2] @manyToMany(relationName: "PostEditor5V2") } type User5V2 @model { id: ID! username: String! posts: [Post5V2] @manyToMany(relationName: "PostEditor5V2") } # type Blog6V2 @model @auth(rules: [{allow: public}]) { id: ID! name: String! posts: [Post6V2] @hasMany(indexName: "byBlog", fields: ["id"]) } type Post6V2 @model @auth(rules: [{allow: public}]) { id: ID! title: String! blogID: ID! @index(name: "byBlog") blog: Blog6V2 @belongsTo(fields: ["blogID"]) comments: [Comment6V2] @hasMany(indexName: "byPost", fields: ["id"]) } type Comment6V2 @model @auth(rules: [{allow: public}]) { id: ID! postID: ID! @index(name: "byPost", sortKeyFields: ["content"]) post: Post6V2 @belongsTo(fields: ["postID"]) content: String! } # 12 Belongs to Relationship field and type names don’t align type Blog7V2 @model { id: ID! name: String! posts: [Post7V2] @hasMany } type Post7V2 @model { id: ID! title: String! blog: Blog7V2 @belongsTo comments: [Comment7V2] @hasMany } type Comment7V2 @model { id: ID! content: String post: Post7V2 @belongsTo } # Secondary index type CustomerSecondaryIndexV2 @model { id: ID! name: String! phoneNumber: String accountRepresentativeID: ID! @index(name: "byRepresentative", queryField: "customerByRepresentative") } type CustomerMultipleSecondaryIndexV2 @model { id: ID! name: String! @index(name: "byNameAndPhoneNumber", sortKeyFields: ["phoneNumber"], queryField: "customerByNameAndPhone") phoneNumber: String age: Int! @index(name: "byAgeAndPhoneNumber", sortKeyFields: ["phoneNumber"], queryField: "customerByAgeAndPhone") accountRepresentativeID: ID! @index(name: "byRepresentative", queryField: "customerByRepresentative2") } # Assign Default Values for fields type TodoWithDefaultValueV2 @model { content: String @default(value: "My new Todo") } # Customize creation and update timestamp type TodoCustomTimestampV2 @model(timestamps: { createdAt: "createdOn", updatedAt: "updatedOn" }) { content: String } # 13 Multiple hasOne-hasMany relationships on same type type Meeting8V2 @model { id: ID! title: String! attendees: [Registration8V2] @hasMany(indexName: "byMeeting", fields: ["id"]) } type Attendee8V2 @model { id: ID! meetings: [Registration8V2] @hasMany(indexName: "byAttendee", fields: ["id"]) } type Registration8V2 @model { id: ID! meetingId: ID @index(name: "byMeeting", sortKeyFields: ["attendeeId"]) meeting: Meeting8V2! @belongsTo(fields: ["meetingId"]) attendeeId: ID @index(name: "byAttendee", sortKeyFields: ["meetingId"]) attendee: Attendee8V2! @belongsTo(fields: ["attendeeId"]) } #14 Custom Primary Key with sortKeyFields type CustomerWithMultipleFieldsinPK @model { id: ID! @primaryKey(sortKeyFields: ["dob","date","time","phoneNumber","priority","height"]) dob: AWSDateTime! date: AWSDate! time: AWSTime! phoneNumber: Int! priority: Priority! height: Float! firstName: String lastName: String } enum Priority { LOW NORMAL HIGH } # 15 # This is to address optional associations use case (Post can exist without a Blog) # See issue https://github.com/aws-amplify/amplify-ios/issues/1792 for more details type Blog8 @model { id: ID! name: String! customs: [MyCustomModel8] notes: [String] posts: [Post8] @hasMany(indexName: "postByBlog", fields: ["id"]) } type Post8 @model { id: ID! name: String! blogId: ID @index(name: "postByBlog") randomId: String @index(name: "byRandom") blog: Blog8 @belongsTo(fields: ["blogId"]) comments: [Comment8] @hasMany(indexName: "commentByPost", fields: ["id"]) } type Comment8 @model { id: ID! content: String postId: ID @index(name: "commentByPost") post: Post8 @belongsTo(fields: ["postId"]) } type MyCustomModel8 { id: ID! name: String! desc: String children: [MyNestedModel8] } type MyNestedModel8 { id: ID! nestedName: String! notes: [String] } # 16 Schema drift scenario type SchemaDrift @model { id: ID! enumValue: EnumDrift } enum EnumDrift { ONE TWO THREE }