Schema
type Issue {
id: ID!
createdAt: String!
userId: String!
user: User!
status: IssueStatus
content: String!
name: String!
}
enum IssueStatus {
BACKLOG
TODO
INPROGRESS
DONE
}
input CreateIssueInput {
name: String!
content: String!
status: IssueStatus
}
type Mutation {
createIssue(input: CreateIssueInput!): Issue!
createUser(input: AuthInput!): User
signin(input: AuthInput!): User
}
Resolvers
const resolvers = {
IssueStatus: {
BACKLOG: 'backlog',
TODO: 'todo',
INPROGRESS: 'inprogress',
DONE: 'done',
},
Issue: {
user: (issue, args, ctx) => {
if (!ctx.user)
throw new GraphQLError('UNAUTHORIZED', { extensions: { code: 401 } })
return db.query.users.findFirst({
where: eq(users.id, issue.userId),
})
},
},
Mutation: {
createIssue: async (_, { input }, ctx: GQLContext) => {
if (!ctx.user)
throw new GraphQLError('UNAUTHORIZED', { extensions: { code: 401 } })
const issue = await db
.insert(issues)
.values({ ...input, userId: ctx.user.id })
.returning()
return issue[0]
},
}
}