summaryrefslogtreecommitdiff
path: root/server/database/seeds.ts
diff options
context:
space:
mode:
Diffstat (limited to 'server/database/seeds.ts')
-rw-r--r--server/database/seeds.ts48
1 files changed, 48 insertions, 0 deletions
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`);
+ }
+ }
+}