chore: add initial query

This commit is contained in:
Ephraim Atta-Duncan
2024-09-17 16:04:13 +00:00
parent 7644c0d855
commit 08d94cf2b2
9 changed files with 496 additions and 5 deletions

View File

@ -0,0 +1,124 @@
import type { Subscription, Team, User } from '@prisma/client';
import { DocumentDataType, PrismaClient } from '@prisma/client';
import fs from 'node:fs';
import path from 'node:path';
import { hashSync } from '@documenso/lib/server-only/auth/hash';
const prisma = new PrismaClient();
const examplePdf = fs
.readFileSync(path.join(__dirname, '../../assets/example.pdf'))
.toString('base64');
async function seedLeaderboardData(numUsers: number, numTeams: number) {
const users: User[] = [];
const teams: Team[] = [];
const subscriptions: Subscription[] = [];
// Create users with subscriptions
for (let i = 0; i < numUsers; i++) {
const user = await prisma.user.create({
data: {
name: `User ${i + 1}`,
email: `user${i + 1}@documenso.com`,
password: hashSync('password'),
emailVerified: new Date(),
},
});
users.push(user);
const subscription = await prisma.subscription.create({
data: {
userId: user.id,
status: 'ACTIVE',
planId: `plan_${Date.now().toString()}`,
priceId: `price_${Date.now().toString()}`,
},
});
subscriptions.push(subscription);
}
// Create teams
for (let i = 0; i < numTeams; i++) {
const ownerUser = users[Math.floor(Math.random() * users.length)];
const team = await prisma.team.create({
data: {
name: `Team ${i + 1}`,
url: `team-${Date.now().toString()}`,
ownerUserId: ownerUser.id,
},
});
teams.push(team);
// Add random users to the team
const teamMembers = users.filter((u) => u.id !== ownerUser.id).slice(0, 3);
for (const member of teamMembers) {
await prisma.teamMember.create({
data: {
teamId: team.id,
userId: member.id,
role: 'MEMBER',
},
});
}
}
// Create documents for each user
for (const user of users) {
const numDocuments = Math.floor(Math.random() * 10) + 1; // 1 to 5 documents per user
for (let i = 0; i < numDocuments; i++) {
const documentData = await prisma.documentData.create({
data: {
type: DocumentDataType.BYTES_64,
data: examplePdf,
initialData: examplePdf,
},
});
await prisma.document.create({
data: {
title: `Personal Document ${i + 1} for User ${user.id}`,
userId: user.id,
status: 'COMPLETED',
documentDataId: documentData.id,
source: 'DOCUMENT',
},
});
}
}
// Create documents for each team
for (const team of teams) {
const numDocuments = Math.floor(Math.random() * 10) + 1; // 1 to 10 documents per team
for (let i = 0; i < numDocuments; i++) {
const documentData = await prisma.documentData.create({
data: {
type: DocumentDataType.BYTES_64,
data: 'base64encodeddata', // Replace with actual data if needed
initialData: 'base64encodeddata', // Replace with actual data if needed
},
});
await prisma.document.create({
data: {
title: `Team Document ${i + 1} for Team ${team.id}`,
userId: team.ownerUserId, // Assign to team owner
teamId: team.id,
status: 'COMPLETED',
documentDataId: documentData.id,
source: 'DOCUMENT',
},
});
}
}
console.log(`Seeded ${users.length} users, ${teams.length} teams, and their documents.`);
}
// Usage
seedLeaderboardData(50, 10)
.catch((e) => console.error(e))
.finally(() => {
void prisma.$disconnect();
});