From eeaa7fd8409ec53c8aebdf1b68ef3e609c3f6346 Mon Sep 17 00:00:00 2001 From: sgayangi Date: Fri, 5 Apr 2024 09:29:13 +0530 Subject: [PATCH] Add sample GraphQL backend --- .../tryout/samples/gql-sample-backend.yaml | 256 ++++++++++++++++++ 1 file changed, 256 insertions(+) create mode 100644 developer/tryout/samples/gql-sample-backend.yaml diff --git a/developer/tryout/samples/gql-sample-backend.yaml b/developer/tryout/samples/gql-sample-backend.yaml new file mode 100644 index 000000000..cf968b380 --- /dev/null +++ b/developer/tryout/samples/gql-sample-backend.yaml @@ -0,0 +1,256 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: graphql-faker-schema +data: + schema.graphql: | + schema { + query: Query + mutation: Mutation + subscription: Subscription + } + + # The query type, represents all of the entry points into our object graph + type Query { + hero(episode: Episode): Character + reviews(episode: Episode!): [Review] + search(text: String): [SearchResult] + character(id: ID!): Character + droid(id: ID!): Droid + human(id: ID!): Human + allHumans(first: Int): [Human] + allDroids(first: Int): [Droid] + allCharacters(first: Int): [Character] + starship(id: ID!): Starship + } + + # The mutation type, represents all updates we can make to our data + type Mutation { + createReview(episode: Episode, review: ReviewInput!): Review + } + + # The subscription type, represents all subscriptions we can make to our data + type Subscription { + reviewAdded(episode: Episode): Review + } + + # The episodes in the Star Wars trilogy + enum Episode { + # Star Wars Episode IV: A New Hope, released in 1977. + NEWHOPE + + # Star Wars Episode V: The Empire Strikes Back, released in 1980. + EMPIRE + + # Star Wars Episode VI: Return of the Jedi, released in 1983. + JEDI + + # Star Wars Episode III: Revenge of the Sith, released in 2005 + SITH + } + + # A character from the Star Wars universe + interface Character { + # The ID of the character + id: ID! + + # The name of the character + name: String! + + # The friends of the character, or an empty list if they have none + friends: [Character] + + # The friends of the character exposed as a connection with edges + friendsConnection(first: Int, after: ID): FriendsConnection! + + # The movies this character appears in + appearsIn: [Episode]! + } + + # Units of height + enum LengthUnit { + # The standard unit around the world + METER + + # Primarily used in the United States + FOOT + } + + # A humanoid creature from the Star Wars universe + type Human implements Character { + # The ID of the human + id: ID! + + # What this human calls themselves + name: String! + + # The home planet of the human, or null if unknown + homePlanet: String + + # Height in the preferred unit, default is meters + height(unit: LengthUnit = METER): Float + + # Mass in kilograms, or null if unknown + mass: Float + + # This human's friends, or an empty list if they have none + friends: [Character] + + # The friends of the human exposed as a connection with edges + friendsConnection(first: Int, after: ID): FriendsConnection! + + # The movies this human appears in + appearsIn: [Episode]! + + # A list of starships this person has piloted, or an empty list if none + starships: [Starship] + } + + # An autonomous mechanical character in the Star Wars universe + type Droid implements Character { + # The ID of the droid + id: ID! + + # What others call this droid + name: String! + + # This droid's friends, or an empty list if they have none + friends: [Character] + + # The friends of the droid exposed as a connection with edges + friendsConnection(first: Int, after: ID): FriendsConnection! + + # The movies this droid appears in + appearsIn: [Episode]! + + # This droid's primary function + primaryFunction: String + } + + # A connection object for a character's friends + type FriendsConnection { + # The total number of friends + totalCount: Int + + # The edges for each of the character's friends. + edges: [FriendsEdge] + + # A list of the friends, as a convenience when edges are not needed. + friends: [Character] + + # Information for paginating this connection + pageInfo: PageInfo! + } + + # An edge object for a character's friends + type FriendsEdge { + # A cursor used for pagination + cursor: ID! + + # The character represented by this friendship edge + node: Character + } + + # Information for paginating this connection + type PageInfo { + startCursor: ID + endCursor: ID + hasNextPage: Boolean! + } + + # Represents a review for a movie + type Review { + # The movie + episode: Episode + + # The number of stars this review gave, 1-5 + stars: Int! + + # Comment about the movie + commentary: String + } + + # The input object sent when someone is creating a new review + input ReviewInput { + # 0-5 stars + stars: Int! + + # Comment about the movie, optional + commentary: String + + # Favorite color, optional + favorite_color: ColorInput + } + + # The input object sent when passing in a color + input ColorInput { + red: Int! + green: Int! + blue: Int! + } + + type Starship { + # The ID of the starship + id: ID! + + # The name of the starship + name: String! + + # Length of the starship, along the longest axis + length(unit: LengthUnit = METER): Float + + coordinates: [[Float!]!] + } + + union SearchResult = Human | Droid | Starship + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: graphql-faker + labels: + app: graphql-faker +spec: + replicas: 1 + selector: + matchLabels: + app: graphql-faker + template: + metadata: + labels: + app: graphql-faker + spec: + containers: + - name: graphql-faker + image: apisguru/graphql-faker + args: ["--open=false", "/etc/graphql-faker/schema.graphql"] + ports: + - containerPort: 9002 + volumeMounts: + - name: schema-volume + mountPath: /etc/graphql-faker + resources: + requests: + memory: "256Mi" + cpu: "250m" + limits: + memory: "512Mi" + cpu: "500m" + volumes: + - name: schema-volume + configMap: + name: graphql-faker-schema +--- +apiVersion: v1 +kind: Service +metadata: + name: graphql-faker-service +spec: + type: ClusterIP + ports: + - port: 9002 + targetPort: 9002 + protocol: TCP + selector: + app: graphql-faker