DEV Community

Cover image for Seeding NestJs with Prisma And Faker
Navin Kodag
Navin Kodag

Posted on

Seeding NestJs with Prisma And Faker

  • 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
Enter fullscreen mode Exit fullscreen mode
// 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
}
Enter fullscreen mode Exit fullscreen mode
  • env("DATABASE_URL") is set in .env file

After that run :

yarn prisma generate
yarn prisma migate dev init
Enter fullscreen mode Exit fullscreen mode

Migrate.png
Now:
onto the actual seeder using faker for generating random data and dotenv to initialize environment variables :

yarn add -D faker dotenv
Enter fullscreen mode Exit fullscreen mode

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();
});

Enter fullscreen mode Exit fullscreen mode
  • Add the seeder to our package.json for ease of use:
{
...
"scripts":{
...
"seed": "ts-node prisma/seed.ts"
}
...
}
Enter fullscreen mode Exit fullscreen mode
  • And then we run the seeder:
yarn seed
Enter fullscreen mode Exit fullscreen mode

seed.png

✨ That's it ✨
The preview of the database:
db-preview.png

(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

Discussion (0)