DEV Community

loading...
Cover image for Seeding NestJs with Prisma And Faker

Seeding NestJs with Prisma And Faker

Navin Kodag
Full stack developer based in Navi Mumbai, India.
・2 min read
  • 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)