Files
calendar/scripts/seed-huge-event-types.ts
T

92 lines
2.3 KiB
TypeScript

/**
* This script can be used to seed the database with a lot of data for performance testing.
* TODO: Make it more structured and configurable from CLI
* Run it as `npx ts-node --transpile-only ./seed-huge-event-types.ts`
*/
import { createTeamAndAddUsers, createUserAndEventType } from "./seed-utils";
const getEventTypes = (numberOfEventTypes: number) => {
const eventTypes = Array<{
title: string;
slug: string;
length: number;
}>(numberOfEventTypes)
.fill({
title: "30min",
slug: "30min",
length: 30,
})
.map((event, index) => {
return {
...event,
title: `30min-${index}`,
slug: `30min-${index}`,
};
});
return eventTypes;
};
async function createTeamsWithEventTypes({
owner,
numberOfTeams,
numberOfEventTypes,
}: {
owner: { id: number; username: string | null };
numberOfTeams: number;
numberOfEventTypes: number;
}) {
const members = [owner];
for (let i = 0; i < 10; i++) {
members.push(
await createUserAndEventType({
user: {
email: `enterprise-member-${i + 1}@example.com`,
name: `Enterprise Member ${i + 1}`,
password: `enterprise-member-${i + 1}`,
username: `enterprise-member-${i + 1}`,
theme: "light",
},
})
);
}
for (let i = 0; i < numberOfTeams; i++) {
await createTeamAndAddUsers(
{
name: `Enterprise Team-${i + 1}`,
slug: `enterprise-team-${i + 1}`,
eventTypes: {
createMany: {
data: getEventTypes(numberOfEventTypes).map((eventType) => {
return {
...eventType,
schedulingType: "COLLECTIVE",
};
}),
},
},
createdAt: new Date(),
},
members.map((member) => ({
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
username: member.username!,
id: member.id,
}))
);
}
}
export default async function main() {
const owner = await createUserAndEventType({
user: {
email: `enterprise@example.com`,
name: "Enterprise Owner",
password: "enterprise",
username: `enterprise`,
theme: "light",
},
eventTypes: getEventTypes(100),
});
await createTeamsWithEventTypes({ owner, numberOfTeams: 10, numberOfEventTypes: 100 });
}