このチャプターの目次
次にQueryのリゾルバを実装していきます。
GetTodoById
src/resolvers/query/getTodoById.ts
import { prisma } from '../../lib/prisma';
import { QueryResolvers } from '../../types/generated/graphql';
export const getTodoById: QueryResolvers['getTodoById'] = async (
parent,
args,
context,
info
) => {
const todo = await prisma.todo.findUnique({
where: {
id: args.id,
},
include: {
user: true,
},
});
if (!todo) {
throw new Error('Not Found Todo.');
}
return { ...todo };
};
GetTodos
src/resolvers/query/getTodos.ts
import { prisma } from '../../lib/prisma';
import { QueryResolvers } from '../../types/generated/graphql';
export const getTodos: QueryResolvers['getTodos'] = async (
parent,
args,
context,
info
) => {
const todos = await prisma.todo.findMany({
where: {
userId: context.user?.id,
},
include: {
user: true,
},
});
return todos;
};
GetUser
src/resolvers/query/getUser.ts
import { prisma } from '../../../src/lib/prisma';
import { QueryResolvers } from '../../types/generated/graphql';
export const getUser: QueryResolvers['getUser'] = async (
parent,
args,
context,
info
) => {
const user = await prisma.user.findUnique({
where: {
id: context.user?.id,
},
});
return user;
};
mutationと同様に、まとめて再exportします。
src/resolvers/query/index.ts
export { getTodoById } from './getTodoById';
export { getTodos } from './getTodos';
export { getUser } from './getUser';
src/resolvers/index.ts
import { Resolvers } from '../types/generated/graphql';
import * as mutation from './mutation';
import * as query from './query';
import { dateScalar } from './scalar/date';
const resolvers: Resolvers = {
Query: query,
Mutation: mutation,
Date: dateScalar,
};
export default resolvers;
これでQueryのリゾルバの実装まで完了しました!
アプリケーションとしてはこれで完成となります。
フロントエンドからTodoを操作してみましょう。
データが永続化され、アプリケーションとして完成されていることが確認できます。
完成時点のソースコード