{"id":15765172,"url":"https://github.com/technote-space/prisma-seeder-tools","last_synced_at":"2025-04-21T04:31:27.425Z","repository":{"id":42066115,"uuid":"344745453","full_name":"technote-space/prisma-seeder-tools","owner":"technote-space","description":null,"archived":false,"fork":false,"pushed_at":"2022-12-06T17:30:13.000Z","size":351,"stargazers_count":4,"open_issues_count":6,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-10-05T12:24:47.254Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/technote-space.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null},"funding":{"custom":"https://paypal.me/technote0space"}},"created_at":"2021-03-05T08:33:31.000Z","updated_at":"2023-01-14T17:49:37.000Z","dependencies_parsed_at":"2023-01-23T11:15:11.962Z","dependency_job_id":null,"html_url":"https://github.com/technote-space/prisma-seeder-tools","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":"technote-space/ts-package-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/technote-space%2Fprisma-seeder-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/technote-space%2Fprisma-seeder-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/technote-space%2Fprisma-seeder-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/technote-space%2Fprisma-seeder-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/technote-space","download_url":"https://codeload.github.com/technote-space/prisma-seeder-tools/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223849432,"owners_count":17213640,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-04T12:24:49.815Z","updated_at":"2024-11-09T16:03:04.948Z","avatar_url":"https://github.com/technote-space.png","language":"TypeScript","funding_links":["https://paypal.me/technote0space"],"categories":[],"sub_categories":[],"readme":"# Prisma Seeder Tools\n\n[![npm version](https://badge.fury.io/js/%40technote-space%2Fprisma-seeder-tools.svg)](https://badge.fury.io/js/%40technote-space%2Fprisma-seeder-tools)\n[![CI Status](https://github.com/technote-space/prisma-seeder-tools/workflows/CI/badge.svg)](https://github.com/technote-space/prisma-seeder-tools/actions)\n[![CodeFactor](https://www.codefactor.io/repository/github/technote-space/prisma-seeder-tools/badge)](https://www.codefactor.io/repository/github/technote-space/prisma-seeder-tools)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/technote-space/prisma-seeder-tools/blob/master/LICENSE)\n\nSeeder tools for prisma\n\n## Table of Contents\n\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDetails\u003c/summary\u003e\n\n- [Usage](#usage)\n  - [Install](#install)\n  - [Use](#use)\n- [Author](#author)\n\n\u003c/details\u003e\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## Usage\n\n### Install\n\n`yarn add @technote-space/prisma-seeder-tools`\n\nor\n\n`npm i @technote-space/prisma-seeder-tools`\n\n### Use\n\ne.g.\n\n```tsx\nimport {PrismaClient} from './client';\nimport {seed, createDefinition, Seeder} from '@technote-space/prisma-seeder-tools';\n\nclass RoomSeeder extends Seeder\u003cPrismaClient\u003e {\n  constructor(prisma: PrismaClient) {\n    super(prisma);\n  }\n\n  public async run(): Promise\u003cvoid\u003e {\n    await this.factory('room').createMany(5);\n  }\n}\nclass GuestSeeder extends Seeder\u003cPrismaClient\u003e {\n  constructor(prisma: PrismaClient) {\n    super(prisma);\n  }\n\n  public async run(): Promise\u003cvoid\u003e {\n    await this.factory('guest').createMany(10);\n  }\n}\nclass ReservationSeeder extends Seeder\u003cPrismaClient\u003e {\n  constructor(prisma: PrismaClient) {\n    super(prisma);\n  }\n\n  public async run(): Promise\u003cvoid\u003e {\n    const rooms  = await this.factory('room').list();\n    const guests = await this.factory('guest').list();\n    await [...Array(300)].reduce(async prev =\u003e {\n      await prev;\n      await this.factory('reservation').create({}, rooms.random(), guests.random());\n    }, Promise.resolve());\n  }\n}\n\n(async() =\u003e {\n  const prisma = new PrismaClient();\n  await seed(prisma, [\n    createDefinition('guest', faker =\u003e ({\n      email: `${faker.random.number()}${faker.random.number()}@example.com`,\n      name: `${faker.name.lastName()} ${faker.name.firstName()}`,\n      phone: faker.phone.phoneNumber(),\n    })),\n    createDefinition('room', faker =\u003e ({\n      name: faker.name.firstName() + faker.random.number(),\n      number: faker.random.number({ min: 1, max: 10 }),\n      price: faker.random.number({ min: 1000, max: 100000 }),\n    })),\n    createDefinition('reservation', (faker, params) =\u003e {\n      const room = params[0] as Room;\n      const guest = params[1] as Guest;\n      const number = faker.random.number({ min: 1, max: room.number });\n      const checkin = faker.date.between(faker.date.past(2), faker.date.future(2));\n      checkin.setHours(15, 0, 0, 0);\n      const nights = faker.random.number({ min: 1, max: 7 });\n      const checkout = new Date(checkin.valueOf());\n      checkout.setDate(checkin.getDate() + nights);\n      checkout.setHours(10, 0, 0, 0);\n      const amount = room.price * number * nights;\n\n      return {\n        checkin,\n        checkout,\n        status,\n        number,\n        amount,\n        room: {\n          connect: {\n            id: room.id,\n          },\n        },\n        guest: {\n          connect: {\n            id: guest.id,\n          },\n        },\n      };\n    }),\n  ], [\n    new GuestSeeder(prisma),\n    new RoomSeeder(prisma),\n    new ReservationSeeder(prisma),\n  ]);\n})();\n```\n\n## Author\n\n[GitHub (Technote)](https://github.com/technote-space)  \n[Blog](https://technote.space)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechnote-space%2Fprisma-seeder-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftechnote-space%2Fprisma-seeder-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftechnote-space%2Fprisma-seeder-tools/lists"}