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(); }, }); }, });
コメント