https://github.com/technote-space/prisma-seeder-tools
https://github.com/technote-space/prisma-seeder-tools
Last synced: 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/technote-space/prisma-seeder-tools
- Owner: technote-space
- License: mit
- Created: 2021-03-05T08:33:31.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2022-12-06T17:30:13.000Z (over 2 years ago)
- Last Synced: 2024-10-05T12:24:47.254Z (9 months ago)
- Language: TypeScript
- Size: 343 KB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: .github/CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# Prisma Seeder Tools
[](https://badge.fury.io/js/%40technote-space%2Fprisma-seeder-tools)
[](https://github.com/technote-space/prisma-seeder-tools/actions)
[](https://www.codefactor.io/repository/github/technote-space/prisma-seeder-tools)
[](https://github.com/technote-space/prisma-seeder-tools/blob/master/LICENSE)Seeder tools for prisma
## Table of Contents
Details
- [Usage](#usage)
- [Install](#install)
- [Use](#use)
- [Author](#author)## Usage
### Install
`yarn add @technote-space/prisma-seeder-tools`
or
`npm i @technote-space/prisma-seeder-tools`
### Use
e.g.
```tsx
import {PrismaClient} from './client';
import {seed, createDefinition, Seeder} from '@technote-space/prisma-seeder-tools';class RoomSeeder extends Seeder {
constructor(prisma: PrismaClient) {
super(prisma);
}public async run(): Promise {
await this.factory('room').createMany(5);
}
}
class GuestSeeder extends Seeder {
constructor(prisma: PrismaClient) {
super(prisma);
}public async run(): Promise {
await this.factory('guest').createMany(10);
}
}
class ReservationSeeder extends Seeder {
constructor(prisma: PrismaClient) {
super(prisma);
}public async run(): Promise {
const rooms = await this.factory('room').list();
const guests = await this.factory('guest').list();
await [...Array(300)].reduce(async prev => {
await prev;
await this.factory('reservation').create({}, rooms.random(), guests.random());
}, Promise.resolve());
}
}(async() => {
const prisma = new PrismaClient();
await seed(prisma, [
createDefinition('guest', faker => ({
email: `${faker.random.number()}${faker.random.number()}@example.com`,
name: `${faker.name.lastName()} ${faker.name.firstName()}`,
phone: faker.phone.phoneNumber(),
})),
createDefinition('room', faker => ({
name: faker.name.firstName() + faker.random.number(),
number: faker.random.number({ min: 1, max: 10 }),
price: faker.random.number({ min: 1000, max: 100000 }),
})),
createDefinition('reservation', (faker, params) => {
const room = params[0] as Room;
const guest = params[1] as Guest;
const number = faker.random.number({ min: 1, max: room.number });
const checkin = faker.date.between(faker.date.past(2), faker.date.future(2));
checkin.setHours(15, 0, 0, 0);
const nights = faker.random.number({ min: 1, max: 7 });
const checkout = new Date(checkin.valueOf());
checkout.setDate(checkin.getDate() + nights);
checkout.setHours(10, 0, 0, 0);
const amount = room.price * number * nights;return {
checkin,
checkout,
status,
number,
amount,
room: {
connect: {
id: room.id,
},
},
guest: {
connect: {
id: guest.id,
},
},
};
}),
], [
new GuestSeeder(prisma),
new RoomSeeder(prisma),
new ReservationSeeder(prisma),
]);
})();
```## Author
[GitHub (Technote)](https://github.com/technote-space)
[Blog](https://technote.space)