92 lines
2.3 KiB
TypeScript
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 });
|
|
}
|