- Seeding NestJs with Prisma And Faker
I've been working on this college project and I chose NestJs for the backend. You could just Hasura or other BaaS platforms for small projects. But I wanted to learn NestJs.
Note: Usage with other ORMs might differ but will be almost the same because we'll be using a script.
What you'll need:
-
NestJs template for existing project setup with prisma as the default ORM
As someone once said.ez commands got brrrr.
- For NestJs
git clone https://github.com/nestjs/typescript-starter.git project
cd project
yarn
yarn add -D prisma
npx prisma init
// prisma/scheme.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
name String
email String @unique
password String
}
- env("DATABASE_URL") is set in .env file
After that run :
yarn prisma generate
yarn prisma migate dev init
Now:
onto the actual seeder using faker for generating random data and dotenv to initialize environment variables :
yarn add -D faker dotenv
Now create the script:
// prisma/seed.ts
import { PrismaClient } from '@prisma/client';
import * as faker from 'faker';
import * as dotenv from 'dotenv';
const prisma = new PrismaClient();
const fakerUser = (): any => ({
name: faker.name.firstName() + faker.name.lastName(),
email: faker.internet.email(),
password: faker.internet.password(),
});
async function main() {
const fakerRounds = 10;
dotenv.config();
console.log('Seeding...');
/// --------- Users ---------------
for (let i = 0; i < fakerRounds; i++) {
await prisma.user.create({ data: fakerUser() });
}
};
main()
.catch((e) => console.error(e))
.finally(async () => {
await prisma.$disconnect();
});
- Add the seeder to our
package.json
for ease of use:
{
...
"scripts":{
...
"seed": "ts-node prisma/seed.ts"
}
...
}
- And then we run the seeder:
yarn seed
✨ That's it ✨
The preview of the database:
(If you're a beginner) don't be alarmed at the number of packages because devDependencies aren't bundled in the production build :]
You can find me at:
https://100lvlmaster.in
Top comments (0)