Open10
NestJS
NestJS CLIをグローバルインストール
これをやると、nest new
でNestJSのプロジェクト作成ができるようになる。
❯ npm i -g @nestjs/cli
プロジェクト作成
任意のディレクトリで以下コマンド実行
❯ nest new nestjs-tutorial
❯ cd nestjs-tutorial
この時点でリポジトリ作成
GraphQLのセットアップをする
GraphQL関連パッケージ追加
❯ npm i @nestjs/graphql @nestjs/apollo graphql apollo-server-fastify
起動するはず
❯ npm run start:dev
起動しなかった。
[Nest] 72068 - 12/09/2022, 3:39:56 PM ERROR [PackageLoader] The "apollo-server-express" package is missing. Please, make sure to install this library ($ npm install apollo-server-express) to take advantage of GraphQLModule.
これをやらないとダメらしい
やったら起動した。
(まだスキーマが一切定義されていないのでエラーは吐く)
Code Firstでいく
とりあえずresourceを一式作る。
❯ npx nest g --help
Usage: nest generate|g [options] <schematic> [name] [path]
Generate a Nest element.
Schematics available on @nestjs/schematics collection:
┌───────────────┬─────────────┬──────────────────────────────────────────────┐
│ name │ alias │ description │
│ application │ application │ Generate a new application workspace │
│ class │ cl │ Generate a new class │
│ configuration │ config │ Generate a CLI configuration file │
│ controller │ co │ Generate a controller declaration │
│ decorator │ d │ Generate a custom decorator │
│ filter │ f │ Generate a filter declaration │
│ gateway │ ga │ Generate a gateway declaration │
│ guard │ gu │ Generate a guard declaration │
│ interceptor │ itc │ Generate an interceptor declaration │
│ interface │ itf │ Generate an interface │
│ middleware │ mi │ Generate a middleware declaration │
│ module │ mo │ Generate a module declaration │
│ pipe │ pi │ Generate a pipe declaration │
│ provider │ pr │ Generate a provider declaration │
│ resolver │ r │ Generate a GraphQL resolver declaration │
│ service │ s │ Generate a service declaration │
│ library │ lib │ Generate a new library within a monorepo │
│ sub-app │ app │ Generate a new application within a monorepo │
│ resource │ res │ Generate a new CRUD resource │
└───────────────┴─────────────┴──────────────────────────────────────────────┘
Options:
-d, --dry-run Report actions that would be taken without writing out results.
-p, --project [project] Project in which to generate files.
--flat Enforce flat structure of generated element.
--no-flat Enforce that directories are generated.
--spec Enforce spec files generation. (default: true)
--skip-import Skip importing (default: false)
--no-spec Disable spec files generation.
-c, --collection [collectionName] Schematics collection to use.
-h, --help Output usage information.
res
で一式できる。コマンド実行するとRESTなのかGraphQLなのかとかCRUDのentrypoint作るのかとか聞いてくるから以下のようにした。
❯ npx nest g res modules/events
? What transport layer do you use? GraphQL (code first)
? Would you like to generate CRUD entry points? Yes
CREATE src/modules/events/events.module.ts (217 bytes)
CREATE src/modules/events/events.resolver.spec.ts (515 bytes)
CREATE src/modules/events/events.resolver.ts (1098 bytes)
CREATE src/modules/events/events.service.spec.ts (446 bytes)
CREATE src/modules/events/events.service.ts (623 bytes)
CREATE src/modules/events/dto/create-event.input.ts (196 bytes)
CREATE src/modules/events/dto/update-event.input.ts (243 bytes)
CREATE src/modules/events/entities/event.entity.ts (187 bytes)
UPDATE src/app.module.ts (704 bytes)
なんか簡易的なスケジュール調整サービス的なサムシングをつくる
(ちゃんとはつくらない)
ユーザーがいてイベントがあってスケジュールがある感じ
データ構造とかは雑。
UserとEventとScheduleを作った。
NestJS v9でFastifyを選ぶとFastify v4がインストールされるようなんだけど、
apollo-server-fastifyがv3までしか対応してないみたいで、起動時にエラーが発生する。
なのでとりあえずNestJS v8で茶を濁す。
(べつにExpressでも良いんだけどね)
ここまでのPull Request
肉付けしていく
type Event {
id: Int!
name: String!
description: String
}
type Schedule {
id: Int!
startAt: DateTime!
endAt: DateTime!
}
type User {
id: Int!
name: String!
comment: String
}
出欠管理のためのデータが足りないことに気づいたので追加
type Attendance {
id: Int!
status: Int
}
DBつくる