boredgame/src/seed.ts

73 lines
1.7 KiB
TypeScript
Raw Normal View History

import 'dotenv/config';
import { drizzle } from 'drizzle-orm/node-postgres';
import pg from 'pg';
import * as schema from './schema';
import {Argon2id} from "oslo/password";
// create the connection
const pool = new pg.Pool({
user: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
host: process.env.DATABASE_HOST,
port: Number(process.env.DATABASE_PORT).valueOf(),
database: process.env.DATABASE_DB,
ssl: process.env.DATABASE_HOST !== 'localhost'
});
const db = drizzle(pool, { schema: schema });
console.log('Creating roles ...');
const adminRole = await db
.insert(schema.roles)
.values([{ name: 'admin' }])
.onConflictDoNothing()
.returning();
const userRole = await db
.insert(schema.roles)
.values([{ name: 'user' }])
.onConflictDoNothing()
.returning();
await db
.insert(schema.roles)
.values([{ name: 'editor' }])
.onConflictDoNothing();
await db
.insert(schema.roles)
.values([{ name: 'moderator' }])
.onConflictDoNothing();
console.log('Roles created.');
console.log('Admin Role: ', adminRole);
const adminUser = await db
.insert(schema.users)
.values({
username: `${process.env.ADMIN_USERNAME}`,
email: '',
hashed_password: await new Argon2id().hash(`${process.env.ADMIN_PASSWORD}`),
first_name: 'Brad',
last_name: 'S',
verified: true
})
.returning()
.onConflictDoNothing();
console.log('Admin user created.', adminUser);
await db.insert(schema.user_roles).values({
user_id: adminUser[0].id,
role_id: adminRole[0].id
}).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
}).onConflictDoNothing();
console.log('Admin user given user role.');
await pool.end();
process.exit();