amati/apps/backend/src/drizzle/seeds/respondentsSeeder.ts

110 lines
3.2 KiB
TypeScript

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<string, string> = 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;