공장을 사용하여 프리즈마 시드를 단순화합니다.
5472 단어 devrelprismaseedtypescript
npx prisma db seed
를 사용하여 시드를 만드는 것이 편리합니다.하지만 시드 스크립트로 데이터를 등록할 때 모든 매개변수를 입력해야 하는 번거로운 준비 과정이 있습니다.
다음 표를 예로 들어 보겠습니다.
model User {
id Int @id @default(autoincrement())
email String @unique
userName String @unique
lastName String
firstName String
school String
@@map(name: "users")
}
이 경우 시드 스크립트는 다음과 같습니다.
// create bob
const bob = await prisma.user.create({
create: {
email: "[email protected]",
username: "bob",
lastName: "curry",
firstName: "bob",
school: "demo",
},
});
// create Chance
const chance = await prisma.user.create({
create: {
email: "[email protected]",
username: "chance",
lastName: "weber",
firstName: "chance",
school: "demo",
},
});
:
:
:
충분할 수도 있지만 나에게는 약간 중복되는 것처럼 보였습니다. 매번 매개변수를 입력하는 것은 지루합니다.
그 해결책으로 faker.js와 같은 라이브러리를 이용하여 팩토리 함수를 구현했지만, 테이블이나 항목이 늘어날 때마다 팩토리 함수를 유지하기가 어렵습니다.
그래서 저는 이상적인 개발 흐름 중 하나가
npx prisma migrate dev
또는 npx prisma generate
를 사용하여 생성된 팩토리 함수를 갖는 것이라고 생각했는데, 이는 Prisma에서 테이블이 추가되거나 항목이 추가될 때 실행됩니다.Prisma에는 Generator라는 좋은 메커니즘이 있으므로 Prisma의 Scheme에서 공장을 생성하는
prisma-factory-generator
라는 생성기를 만드는 데 사용했습니다.https://github.com/toyamarinyon/prisma-factory-generator
이를 사용하여 이전 시드 스크립트를 다음과 같이 다시 작성할 수 있습니다.
// For the sake of clarity, I have omitted imports
// and grammatical descriptions.
const bob = await createUser({ userName: 'bob' })
const chance = await createUser({ userName: 'chance' })
Prisma-factory-generator
는 시드 뿐만 아니라 테스트 코드에도 유용할 것 같으니 괜찮으시다면 꼭 사용해 보세요.작동하지 않는 경우가 있으면 문제를 다음으로 보내주십시오.
https://github.com/toyamarinyon/prisma-factory-generator/issues
특별한 감사
Prisma Generator로 공장을 만드는 아이디어는 Prisma Day 2021에서 Chris Ball의 프레젠테이션을 기반으로 합니다.
토론: https://github.com/echobind/prisma-factory/discussions/1
프레젠테이션:
Reference
이 문제에 관하여(공장을 사용하여 프리즈마 시드를 단순화합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/toyamarinyon/use-factory-to-simplify-prisma-seed-2c6m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)