this repo has no description
1import { readFileSync } from "node:fs";
2import { dirname, resolve } from "node:path";
3import { fileURLToPath } from "node:url";
4import { env } from "~/env.js";
5import { drizzle } from "drizzle-orm/postgres-js";
6import postgres from "postgres";
7import * as schema from "./schema.js";
8import { relations } from "./relations.js";
9
10type SeedData = {
11 pokemon: Array<{
12 id: number;
13 name: string;
14 dexId: number;
15 }>;
16 types: Array<{
17 id: number;
18 name: string;
19 }>;
20 pokemonTypes: Array<{
21 id: number;
22 pokemonId: number;
23 typeId: number;
24 }>;
25};
26
27const currentDir = dirname(fileURLToPath(import.meta.url));
28const seedDataPath = resolve(currentDir, "./seed-data.json");
29
30const seedData = JSON.parse(readFileSync(seedDataPath, "utf8")) as SeedData;
31
32const client = postgres(env.DATABASE_URL, { prepare: false });
33const db = drizzle({
34 client,
35 relations,
36});
37
38const BATCH_SIZE = 500;
39
40await db.delete(schema.pokemon);
41await db.delete(schema.types);
42await db.delete(schema.pokemonTypes);
43
44for (let index = 0; index < seedData.pokemon.length; index += BATCH_SIZE) {
45 await db.insert(schema.pokemon).values(seedData.pokemon.slice(index, index + BATCH_SIZE));
46}
47
48await db.insert(schema.types).values(seedData.types);
49
50for (let index = 0; index < seedData.pokemonTypes.length; index += BATCH_SIZE) {
51 await db
52 .insert(schema.pokemonTypes)
53 .values(seedData.pokemonTypes.slice(index, index + BATCH_SIZE));
54}
55
56console.log(
57 `Seeded: ${seedData.pokemon.length} pokemon, ${seedData.types.length} types, ${seedData.pokemonTypes.length} pokemon_types`,
58);