import { hashPassword } from "../..//utils/passwordUtils"; import { users } from "../schema/users"; import db from ".."; import { rolesSchema } from "../schema/roles"; import { eq } from "drizzle-orm"; import { rolesToUsers } from "../schema/rolesToUsers"; const userSeeder = async () => { const usersData: (typeof users.$inferInsert & { roles: string[] })[] = [ { name: "Super Admin", password: await hashPassword("123456"), username: "superadmin", email: "admin@admin.com", roles: ["super-admin"], }, { name: "Respondent User 2", password: await hashPassword("123456"), username: "respondentUser2", email: "respondentUser2@gmail.com", roles: ["user"], }, { name: "Respondent User 3", password: await hashPassword("123456"), username: "respondentUser3", email: "respondentUser3@gmail.com", roles: ["user"], }, { name: "Respondent User 4", password: await hashPassword("123456"), username: "respondentUser4", email: "respondentUser4@gmail.com", roles: ["user"], }, { name: "Respondent User 5", password: await hashPassword("123456"), username: "respondentUser5", email: "respondentUser5@gmail.com", roles: ["user"], }, ]; console.log("Seeding users..."); const memoizedRoleIds: Map = new Map(); for (let user of usersData) { const insertedUser = ( await db .insert(users) .values(usersData) .onConflictDoNothing() .returning() )[0]; if (insertedUser) { for (let roleCode of user.roles) { if (!memoizedRoleIds.has(roleCode)) { const role = ( await db .select({ id: rolesSchema.id }) .from(rolesSchema) .where(eq(rolesSchema.code, roleCode)) )[0]; if (!role) throw new Error( `Role ${roleCode} does not exists on database` ); memoizedRoleIds.set(roleCode, role.id); } await db.insert(rolesToUsers).values({ roleId: memoizedRoleIds.get(roleCode)!, userId: insertedUser.id, }); console.log(`User ${user.name} created`); } } else { console.log(`User ${user.name} already exists`); } } // await db.insert(users).values(usersData).onConflictDoNothing().returning(); }; export default userSeeder;