見出し画像

Nest.js/Prismaの練習

前職はRuby, Rails, TypeScriptがメインで、今もその種のWeb Developerの仕事を探しているのですが、Rubyに関しては募集はあるのにもうSeniorしか雇ってないんじゃないかっていうくらい引っかかりません。


少し前からJS/TSをもう少し固めようと思って、練習?復習しています。
その中でNest.jsという割と新しめのframeworkを勉強し始めました。

Nest.js

Expressさえやったことなかったので、この前チラッとやってみましたけど、
Nest.jsの方がトントンと頭に入ってくるような、、、

Controllerはrouteのみで、中身は全部serviceに書かれます。
なんか色々pipeとかguardsとかあるんですけど、それぞれまだ少し何となくしか掴めていません。しっかりわかった時にまたnoteに書きたいです。

Prisma

PrismaというORMを取り入れていますが、私はとても使いやすいです。Railsをもっと極めてたらもっともっとわかりやすいのかな。

Prismaの好きなところは全部JavaScriptで、別に新しいこと覚えることがあまり少ないとこです。

Seeding

昨日はseedしてみたんですけど、そのままofficial docの例に習ったらすぐできましたしstraight forwardです。

fakerを使って普通にこんな感じでした。

// prisma/seed.ts

import { PrismaClient } from '@prisma/client';
import { faker } from '@faker-js/faker';
import * as argon from 'argon2';

const prisma = new PrismaClient();

async function main() {
  const seedAmount = 50000;

  for (let i = 0; i < seedAmount; i++) {
    const password = await argon.hash(faker.internet.password());
    await prisma.user.create({
      data: {
        email: faker.internet.email(),
        password,
        firstName: faker.person.firstName(),
        lastName: faker.person.lastName(),
      },
    });
  }
}

main()
  .then(async () => {
    await prisma.$disconnect();
  })
  .catch(async (e) => {
    console.error(e);
    await prisma.$disconnect();
    process.exit(1);
  })
  .finally(() => {
    prisma.$disconnect();
  });

解決策が見つかっていない謎

これ他のデータもどんどんseedしたくなったらこのファイルばりデカくなると思うので、一旦分けてみたんですが、そうするとコマンドがききません。

scriptに書こうとすると、ファイルごとにscriptも増えるし、どれがいい解決策なんでしょうね。

調べたのはコマンドにfile名をパスする、という方法でした。(元気なくてやってません)
一部のデータだけseedしたい時みんなどうしてるんだろう。

今日は

火曜にJSのTechnical Interviewがあるので週末もお勉強です。LeetCodeぼちぼちやります。
キウイがいつもより少し早めに起こしてきて、ある意味ラッキーかな。


 ブランケット好き

この記事が気に入ったらサポートをしてみませんか?