summaryrefslogtreecommitdiff
path: root/server/database
diff options
context:
space:
mode:
Diffstat (limited to 'server/database')
-rw-r--r--server/database/cli_config.ts4
-rw-r--r--server/database/seeds.ts48
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`);
+ }
+ }
+}