110 lines
3.2 KiB
TypeScript
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; |