未分類

【ReactNative】GraphQL Backend 構築 ❸ 〜Nexus Type 作成〜

apollo-server-nexus-02 未分類
スポンサーリンク

この記事は、⬇︎の記事の続きです。

Nexus タイプを作成する

以前の記事で PostgreSQL TablePrisma タイプ ( prisma/schema.prisma ) で作成しました。

次は、Prismaタイプ を Apollo Server 即ち、Graphql タイプ に変換します。

Nexus タイプ を作成し prisma migrate コマンドを実行すれば Graphql タイプ に変換されます!

apollo-server-nexus-02

src/graphql/Post.ts を作成します。

DateTime 型を実装する必要があるため下記の記事で続きます。

src/graphql/Profile.ts を作成します。

// src/graphql/Profile.ts

import { objectType, extendType, nonNull, stringArg } from "nexus";

/*
  *** Prisma type ***
  model Profile {
    id     Int     @id @default(autoincrement())
    bio    String?
    user   User    @relation(fields: [userId], references: [id])
    userId Int     @unique
  }
*/

export const Profile = objectType({
  name: "Profile",
  definition(t) {
    t.nonNull.int("id");
    t.string("bio");
    t.field("user", {
      type: "User",
      resolve: (parent, _, ctx) => {
        return ctx.prisma.user.findUnique({ where: { id: parent.id } }).user();
      },
    });
  },
});

src/graphql/User.ts を作成します。

// src/graphql/User.ts

import { objectType } from "nexus";

/*
  *** Prisma type ***
  model User {
    id      Int      @id @default(autoincrement())
    email   String   @unique
    name    String?
    posts   Post[]
    profile Profile?
  }
*/

export const User = objectType({
  name: "User",
  definition(t) {
    t.nonNull.int("id");
    t.nonNull.string("email");
    t.string("name");
    t.field("posts", {
      type: "Post",
      resolve: (parent, _, ctx) => {
        return ctx.prisma.post.findUnique({ where: { id: parent.id } }).post();
      },
    });
  },
});

まとめ

src/graphql/xxx.ts ファイルに GraphQL Type を作成して保存すると、保存たびに src/schema.ts で設定済みの output 先である src/generated/nexus-typegen.tssrc/generated/schema.graphql ファイルが書き換えられ、Apollo Server に同期されます。

src/generated ディレクトリーを削除するのはデバッグの一つの手段です。

※ Json 型の設定はこちら⬇︎⬇︎

スポンサーリンク

コメント

タイトルとURLをコピーしました