mirror of
https://github.com/BradNut/boredgame
synced 2025-09-08 17:40:22 +00:00
96 lines
2.6 KiB
TypeScript
96 lines
2.6 KiB
TypeScript
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()
|
|
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}`),
|
|
})
|
|
|
|
await db.insert(schema.collections).values({ user_id: adminUser[0].id }).onConflictDoNothing()
|
|
|
|
await db.insert(schema.wishlistsTable).values({ user_id: adminUser[0].id }).onConflictDoNothing()
|
|
|
|
await db
|
|
.insert(schema.user_roles)
|
|
.values({
|
|
user_id: adminUser[0].id,
|
|
role_id: adminRole[0].id,
|
|
primary: true,
|
|
})
|
|
.onConflictDoNothing()
|
|
|
|
console.log('Admin user given admin role.')
|
|
|
|
await db
|
|
.insert(schema.user_roles)
|
|
.values({
|
|
user_id: adminUser[0].id,
|
|
role_id: userRole[0].id,
|
|
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()
|
|
await db.insert(schema.credentialsTable).values({
|
|
user_id: insertedUser?.id,
|
|
type: schema.CredentialsType.PASSWORD,
|
|
secret_data: await hasingService.hash(user.password),
|
|
})
|
|
await db.insert(schema.collections).values({ user_id: insertedUser?.id })
|
|
await db.insert(schema.wishlistsTable).values({ user_id: insertedUser?.id })
|
|
await Promise.all(
|
|
user.roles.map(async (role: JsonRole) => {
|
|
const foundRole = await db.query.rolesTable.findFirst({
|
|
where: eq(schema.rolesTable.name, role.name),
|
|
})
|
|
if (!foundRole) {
|
|
throw new Error('Role not found')
|
|
}
|
|
await db.insert(schema.user_roles).values({
|
|
user_id: insertedUser?.id,
|
|
role_id: foundRole?.id,
|
|
primary: role?.primary,
|
|
})
|
|
}),
|
|
)
|
|
}),
|
|
)
|
|
}
|