sendou.ink/prisma/seed.ts
Ryan Laughlin bf30c025f8
Use a factory to create seed data (#315)
* Add fishery for factory creation

* Refactor existing seed file

* Create a UserFactory to seed user data

* Make fishery a devDependency

* Prefer const over let

* Eliminate the dropAllData method

* Move factory files to prisma/factories

* Update UserFactory to return valid discordAvatar value
2021-03-31 12:01:16 +03:00

68 lines
1.5 KiB
TypeScript

import fs from "fs";
import path from "path";
import prisma from "./client";
import {
getPlusVotingSummaryData,
getPlusSuggestionsData,
getPlusStatusesData,
} from "./mocks/plus";
import userFactory from "./factories/user"
async function main() {
throwIfNotLocalhost();
await seedNewData();
}
function throwIfNotLocalhost() {
fs.readFile(
path.join(process.cwd(), "prisma", ".env"),
function (err: any, data: any) {
if (!err) {
for (const line of data.toString().split("\n")) {
if (!line.startsWith("DATABASE_URL=")) {
continue;
}
if (!line.includes("localhost:")) {
console.error("trying to seed a database not in localhost");
process.exit(1);
}
}
} else {
console.error(err);
process.exit(1);
}
}
);
}
async function seedNewData() {
await seedUsers();
await prisma.plusStatus.createMany({ data: getPlusStatusesData() });
await prisma.plusSuggestion.createMany({ data: getPlusSuggestionsData() });
await prisma.plusVotingSummary.createMany({
data: getPlusVotingSummaryData(),
});
}
async function seedUsers() {
const randomUsers = [...Array(10)].map((_, _i) => {
return userFactory.build();
})
await prisma.user.createMany({data: [
...randomUsers,
userFactory.build({username: "Sendou", patreonTier: 1}),
userFactory.build({username: "NZAP"})
]})
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});