amplify-swift/AmplifyPlugins/API/AWSAPICategoryPluginFunctio.../GraphQLModelBased
Sebastian Villena 08d7313870
chore: Fixing SwiftLint warnings (#2732)
* chore: Fixing SwiftLint warnings in Amplify project

* chore: Fixing SwiftLint warnings in APICategoryPlugin  project

* chore: Fixing SwiftLint warnings in AnalyticsCategoryPlugin project

* chore: Fixing SwiftLint warnings in AWSCognitoAuthPlugin project

* chore: Fixing SwiftLint warnings in DataStoreCategoryPlugin project

* chore: Fixing SwiftLint warnings in PredictionsCategoryPlugin project

* chore: Fixing SwiftLint warnings in StoragePlugin project
2023-02-08 15:06:41 -05:00
..
GraphQLConnectionScenario1Tests.swift chore: Fixing SwiftLint warnings (#2732) 2023-02-08 15:06:41 -05:00
GraphQLConnectionScenario2Tests.swift chore: Fixing SwiftLint warnings (#2732) 2023-02-08 15:06:41 -05:00
GraphQLConnectionScenario3Tests+Helpers.swift chore: Remove copyright year from .swift, .h, .plist files (#1008) 2021-01-06 11:44:40 -08:00
GraphQLConnectionScenario3Tests+List.swift chore: Fixing SwiftLint warnings (#2732) 2023-02-08 15:06:41 -05:00
GraphQLConnectionScenario3Tests+Subscribe.swift chore: Fixing SwiftLint warnings (#2732) 2023-02-08 15:06:41 -05:00
GraphQLConnectionScenario3Tests.swift chore: Fixing SwiftLint warnings (#2732) 2023-02-08 15:06:41 -05:00
GraphQLConnectionScenario4Tests.swift chore: Fixing SwiftLint warnings (#2732) 2023-02-08 15:06:41 -05:00
GraphQLConnectionScenario5Tests.swift chore: Fixing SwiftLint warnings (#2732) 2023-02-08 15:06:41 -05:00
GraphQLConnectionScenario6Tests.swift chore: Fixing SwiftLint warnings (#2732) 2023-02-08 15:06:41 -05:00
GraphQLModelBasedTests+Concurrency.swift chore: Fixing SwiftLint warnings (#2732) 2023-02-08 15:06:41 -05:00
GraphQLModelBasedTests+List.swift chore: Fixing SwiftLint warnings (#2732) 2023-02-08 15:06:41 -05:00
GraphQLModelBasedTests.swift chore: Fixing SwiftLint warnings (#2732) 2023-02-08 15:06:41 -05:00
GraphQLScalarTests.swift chore: Fixing SwiftLint warnings (#2732) 2023-02-08 15:06:41 -05:00
GraphQLTestBase.swift chore(Model): API and DataStore integration test for scalars, lists, enums (#1135) 2021-05-04 09:56:31 -07:00
README.md test: Move the test logic to use common configuration (#1480) 2021-10-26 09:50:35 -07:00

README.md

Model Based GraphQL

The following steps demonstrate how to set up a GraphQL endpoint with AppSync. The auth configured will be API key. The set up is used to run the tests in GraphQLModelBasedTests.swift

Set-up

  1. amplify init

  2. amplify add api

? Please select from one of the below mentioned services: `GraphQL`
? Provide API name: `<APIName>`
? Choose the default authorization type for the API `API key`
? Enter a description for the API key:
? After how many days from now the API key should expire (1-365): `365`
? Do you want to configure advanced settings for the GraphQL API `No, I am done`
? Do you have an annotated GraphQL schema? `Yes`
? Provide your schema file path: `schema.graphql`

When asked to provide the schema, create the schema.graphql file

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")
}

## 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 teams 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
}

  1. amplify push

  2. Copy amplifyconfiguration.json over as GraphQLModelBasedTests-amplifyconfiguration.json to ~/.aws-amplify/amplify-ios/testconfiguration/