Prisma チームは現在、nexus-plugin-prisma の長期的に保守できるようにプラグインを書き直しているため、DateTimeタイプはサポートされていません。
そもそも、DateTime 型は GraphQL (または Nexus) でネイティブにサポートされていないため、最初にそれを GraphQL スキーマに追加する必要があります。 GraphQL スカラーの標準 ISO 日付実装は、graphql-iso-date npm パッケージから使用できます。
まず、パッケージをプロジェクトに追加します。
パッケージを追加する
try🐶everything backend$ yarn add graphql-iso-date try🐶everything backend$ yarn add @types/graphql-iso-date --dev
新しい Types を指定する
以前記事の src/schema.ts を下記のように変更します。(Line 5、8)
// src/schema.ts
import { makeSchema } from "nexus";
import { join } from "path";
import * as types from "./graphql";
export const schema = makeSchema({
types,
outputs: {
typegen: join(__dirname, "generated", "nexus-typegen.ts"),
schema: join(__dirname, "generated", "schema.graphql"),
},
});
DateTime タイプを定義する
src/graphql/DateTime.ts を作成します。
// src/graphql/DateTime.ts
import { GraphQLDateTime } from "graphql-iso-date";
export const DateTime = GraphQLDateTime;
// ❌ NOT WORKING
// import { asNexusMethod } from "nexus";
// export const DateTime = asNexusMethod(GraphQLDateTime, "date");
src/graphql/index.ts を作成します。
// src/graphql/index.ts
export { DateTime } from "./DateTime";
export { Post } from "./Post";
export { Profile } from "./Profile";
export { User } from "./User";
DateTime タイプを適用する
createdAt、updatedAt フィルドに DateTime 型を適用します。(Line 9-10、23-24)
src/graphql/Post.ts を作成します。
// src/graphql/Post.ts
import { objectType } from "nexus";
/*
*** Prisma type ***
model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
title String @db.VarChar(255)
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}
*/
export const Post = objectType({
name: "Post",
definition(t) {
t.nonNull.int("id");
t.nonNull.field("createdAt", { type: "DateTime" });
t.nonNull.field("updatedAt", { type: "DateTime" });
t.nonNull.string("title");
t.string("content");
t.boolean("published");
t.field("author", {
type: "User",
resolve: (parent, _, ctx) => {
return ctx.prisma.user.findUnique({ where: { id: parent.id } }).user();
},
});
},
});

コメント