amati/apps/backend/src/drizzle/seeds/userSeeder.ts
2024-10-17 09:37:51 +07:00

93 lines
2.2 KiB
TypeScript

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