Free preview
Add Feed queries and mutations
Part of End to End React with Prisma 2
Objective: Create all of the feed queries and the create mutation.
utils/api/typeDefs.ts
import { gql } from 'apollo-server-micro'
export const typeDefs = gql`
type Feed {
id: String
name: String
url: String
}
input FeedCreateInput {
id: String
url: String
name: String
}
type Query {
hello: String
}
type Mutation {
createFeed(data: FeedCreateInput): Feed
}
`
utils/api/resolvers.ts
export const resolvers = {
Query: {
hello: (parent, args, context) => `hi!`,
},
Mutation: {
createFeed: async (parent, { data }, { prisma, user }) => {
const result = await prisma.feed.create({ data: { ...data } })
return result
},
},
}
Mutation:
mutation createFeedMutation($data: FeedCreateInput) {
createFeed(data: $data) {
...FeedFragment
}
}
fragment FeedFragment on Feed {
id
name
url
}
Mutation Variables:
{
"data": {
"name": "NY Times",
"url": "https://rss.nytimes.com/services/xml/rss/nyt/World.xml",
"id": "1"
}
}
Now let’s add the feed and feeds query. Add them first to the resolvers and then to the typeDefs:
utils/api/typeDefs.ts
import { gql } from 'apollo-server-micro'
export const typeDefs = gql`
type Feed {
id: String
name: String
url: String
}
input FeedInput {
id: String
}
input FeedCreateInput {
id: String
url: String
name: String
}
type Query {
hello: String
feed(data: FeedInput): Feed
feeds: [Feed]
}
type Mutation {
createFeed(data: FeedCreateInput): Feed
}
`
utils/api/resolvers.ts
export const resolvers = {
Query: {
hello: (parent, args, context) => `hi!`,
feed: (parent, { data: { id } }, { prisma }) =>
prisma.feed.findOne({ where: { id } }),
feeds: (parent, args, { prisma }) => prisma.feed.findMany(),
},
Mutation: {
createFeed: async (parent, { data }, { prisma, user }) => {
const result = await prisma.feed.create({ data: { ...data } })
return result
},
},
}
Query I
{
feeds {
id
url
}
}
Query II
query feedQuery($data: FeedInput) {
feed(data: $data) {
...FeedFragment
}
}
fragment FeedFragment on Feed {
id
name
url
}
Query II Variables
{
"data": { "id": "1" }
}