import db from ".."; import { eq, and } from "drizzle-orm"; import { users } from "../schema/users"; import { respondents } from "../schema/respondents"; const respondentSeeder = async () => { const respondentsData: (typeof respondents.$inferInsert & { userName: string })[] = [ { userName: "Respondent User 2", companyName: "Company C", position: "Employee", workExperience: "4 years", address: "Address D", phoneNumber: "1234567890123", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, }, { userName: "Respondent User 3", companyName: "Company DD", position: "Manager Account", workExperience: "6 years", address: "Address HRT", phoneNumber: "1234567890123", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, }, { userName: "Respondent User 4", companyName: "Company FS", position: "Developer", workExperience: "8 years", address: "Address HFD", phoneNumber: "1234567890123", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, }, { userName: "Respondent User 5", companyName: "Company DA", position: "Start", workExperience: "3 years", address: "Address JWO", phoneNumber: "1234567890123", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, }, ]; console.log("Seeding users and respondents..."); const memoizedUserIds: Map = new Map(); for (let respondent of respondentsData) { if (!memoizedUserIds.has(respondent.userName)) { const user = ( await db .select({ id: users.id }) .from(users) .where(eq(users.name, respondent.userName)) )[0]; if (!user) { throw new Error(`User ${respondent.userName} does not exist in the database`); } memoizedUserIds.set(respondent.userName, user.id); } const UserId = memoizedUserIds.get(respondent.userName)!; const existingRespondent = await db .select() .from(respondents) .where(and(eq(respondents.companyName, respondent.userName), eq(respondents.userId, UserId))) .limit(1); if (existingRespondent.length === 0) { const insertedRespondent = ( await db .insert(respondents) .values({ companyName: respondent.companyName, position: respondent.position, workExperience: respondent.workExperience, address: respondent.address, phoneNumber: respondent.phoneNumber, createdAt: respondent.createdAt, updatedAt: respondent.updatedAt, deletedAt: respondent.deletedAt, userId: UserId, }) .onConflictDoNothing() .returning() )[0]; if (insertedRespondent) { console.log(`Respondent ${respondent.companyName} created and linked to respondent ${respondent.userName}`); } } else { console.log(`Respondent ${respondent.companyName} already exists`); } } }; export default respondentSeeder;