boredgame/src/lib/server/api/databases/seeds/users.ts

97 lines
2.6 KiB
TypeScript
Raw Normal View History

import { eq } from 'drizzle-orm'
import type { db } from '../../packages/drizzle'
import { HashingService } from '../../services/hashing.service'
import * as schema from '../tables'
import users from './data/users.json'
type JsonRole = {
name: string
primary: boolean
}
export default async function seed(db: db) {
const hashingService = new HashingService()
2024-09-04 23:04:41 +00:00
const adminRole = await db.select().from(schema.rolesTable).where(eq(schema.rolesTable.name, 'admin'))
const userRole = await db.select().from(schema.rolesTable).where(eq(schema.rolesTable.name, 'user'))
console.log('Admin Role: ', adminRole)
const adminUser = await db
.insert(schema.usersTable)
.values({
username: `${process.env.ADMIN_USERNAME}`,
email: '',
first_name: 'Brad',
last_name: 'S',
verified: true,
})
.returning()
.onConflictDoNothing()
console.log('Admin user created.', adminUser)
await db.insert(schema.credentialsTable).values({
user_id: adminUser[0].id,
type: schema.CredentialsType.PASSWORD,
secret_data: await hashingService.hash(`${process.env.ADMIN_PASSWORD}`),
})
2024-08-14 00:07:21 +00:00
await db.insert(schema.collections).values({ user_id: adminUser[0].id }).onConflictDoNothing()
2024-09-04 23:04:41 +00:00
await db.insert(schema.wishlistsTable).values({ user_id: adminUser[0].id }).onConflictDoNothing()
await db
2024-08-14 00:07:21 +00:00
.insert(schema.user_roles)
.values({
user_id: adminUser[0].id,
role_id: adminRole[0].id,
2024-08-14 00:07:21 +00:00
primary: true,
})
.onConflictDoNothing()
console.log('Admin user given admin role.')
await db
2024-08-14 00:07:21 +00:00
.insert(schema.user_roles)
.values({
user_id: adminUser[0].id,
role_id: userRole[0].id,
2024-08-14 00:07:21 +00:00
primary: false,
})
.onConflictDoNothing()
console.log('Admin user given user role.')
const hasingService = new HashingService()
await Promise.all(
users.map(async (user) => {
const [insertedUser] = await db
.insert(schema.usersTable)
.values({
...user,
})
.returning()
2024-08-14 00:07:21 +00:00
await db.insert(schema.credentialsTable).values({
user_id: insertedUser?.id,
type: schema.CredentialsType.PASSWORD,
secret_data: await hasingService.hash(user.password),
2024-08-14 00:07:21 +00:00
})
await db.insert(schema.collections).values({ user_id: insertedUser?.id })
2024-09-04 23:04:41 +00:00
await db.insert(schema.wishlistsTable).values({ user_id: insertedUser?.id })
await Promise.all(
user.roles.map(async (role: JsonRole) => {
2024-09-04 23:04:41 +00:00
const foundRole = await db.query.rolesTable.findFirst({
where: eq(schema.rolesTable.name, role.name),
})
if (!foundRole) {
throw new Error('Role not found')
}
2024-08-14 00:07:21 +00:00
await db.insert(schema.user_roles).values({
user_id: insertedUser?.id,
role_id: foundRole?.id,
primary: role?.primary,
})
}),
)
}),
)
}