diff options
Diffstat (limited to 'server/database')
-rw-r--r-- | server/database/cli_config.ts | 4 | ||||
-rw-r--r-- | server/database/seeds.ts | 48 |
2 files changed, 52 insertions, 0 deletions
diff --git a/server/database/cli_config.ts b/server/database/cli_config.ts index e75cce8..44a1883 100644 --- a/server/database/cli_config.ts +++ b/server/database/cli_config.ts @@ -8,15 +8,19 @@ export = process.env.NODE_ENV === 'development' database: process.env.DATABASE_URL, autoLoadEntities: true, migrations: ['server/database/migrations/*.ts'], + seeds: ['server/database/seeds.ts'], cli: { migrationsDir: 'server/database/migrations', }, + entities: ['server/entities/**/*.entity.ts'], } : { url: process.env.DATABASE_URL, ssl: { rejectUnauthorized: true }, migrations: ['server/database/migrations/*.ts'], + seeds: ['server/database/seeds.ts'], cli: { migrationsDir: 'server/database/migrations', }, + entities: ['server/entities/**/*.entity.ts'], }; diff --git a/server/database/seeds.ts b/server/database/seeds.ts new file mode 100644 index 0000000..101b48b --- /dev/null +++ b/server/database/seeds.ts @@ -0,0 +1,48 @@ +import { Factory, Seeder } from 'typeorm-seeding'; +import { Connection, Db } from 'typeorm'; +import { User } from '../entities/user.entity'; +import { Role } from '../entities/role.entity'; +import * as dotenv from 'dotenv'; +import * as bcrypt from 'bcrypt'; +import { UserRole } from '../entities/user_role.entity'; +dotenv.config(); + +export default class Seeds implements Seeder { + public async run(factory: Factory, connection: Connection): Promise<any> { + // CREATE ROLES + console.log('\nCreating Roles'); + const roleObjects = Role.ROLES.map((key) => ({ key })); + const roleRepository = connection.getRepository(Role); + for (const roleObj of roleObjects) { + // only insert roles if not present already + const role = await roleRepository.findOne(roleObj); + if (!role) { + console.log(`Creating role '${role.key}'`); + await roleRepository.insert(roleObj); + } else { + console.log(`Role '${role.key}' already exists`); + } + } + + // CREATE ADMIN USER + const userRepository = connection.getRepository(User); + const userRoleRepository = connection.getRepository(UserRole); + let adminUser = await userRepository.findOne({ email: process.env.ADMIN_EMAIL }); + if (!adminUser) { + const adminRole = await roleRepository.findOne({ key: Role.ADMIN }); + console.log(`\nCreating Admin User with email ${process.env.ADMIN_EMAIL}`); + console.log(adminRole); + const passwordHash = await bcrypt.hash(process.env.ADMIN_PASSWORD, 10); + adminUser = new User(); + adminUser.email = process.env.ADMIN_EMAIL; + adminUser.passwordHash = passwordHash; + adminUser.name = 'Site Admin'; + const adminUserRole = new UserRole(); + adminUserRole.role = adminRole; + adminUser.userRoles = [adminUserRole]; + await userRepository.save(adminUser); + } else { + console.log(`\nAdmin User with email ${process.env.ADMIN_EMAIL} already exists`); + } + } +} |