diff --git a/ormconfig.ts b/ormconfig.ts index 377a7e8..aa5f916 100644 --- a/ormconfig.ts +++ b/ormconfig.ts @@ -1,12 +1,13 @@ -import { config } from 'dotenv'; -config(); - -export default { - type: process.env.DB_TYPE, - host: process.env.DB_HOST, - port: process.env.DB_PORT, - username: process.env.DB_USER, - password: process.env.DB_PASSWORD, - database: process.env.DB_NAME, - entities: ["src/models/entities/*.ts"] -}; +import { config } from 'dotenv'; +config(); + +export default { + type: process.env.DB_TYPE, + host: process.env.DB_HOST, + port: process.env.DB_PORT, + username: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, + entities: ["src/models/entities/*.ts"], + seeds: ['src/seeds/*.ts'], +}; diff --git a/package.json b/package.json index f0f8d45..6715b59 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "swagger-ui-express": "^4.1.5", "typeorm": "^0.2.29", "typeorm-routing-controllers-extensions": "^0.2.0", + "typeorm-seeding": "^1.6.1", "uuid": "^8.3.1" }, "devDependencies": { @@ -71,7 +72,8 @@ "docs": "typedoc --out docs src", "test": "jest", "test:watch": "jest --watchAll", - "test:ci": "start-server-and-test dev http://localhost:4010/api/openapi.json test" + "test:ci": "start-server-and-test dev http://localhost:4010/api/openapi.json test", + "seed": "ts-node ./node_modules/typeorm/cli.js schema:sync && ts-node ./node_modules/typeorm-seeding/dist/cli.js seed" }, "nodemonConfig": { "ignore": [ diff --git a/src/loaders/database.ts b/src/loaders/database.ts index ee331ae..806b286 100644 --- a/src/loaders/database.ts +++ b/src/loaders/database.ts @@ -1,10 +1,15 @@ import { createConnection } from "typeorm"; - +import { runSeeder } from 'typeorm-seeding'; +import { User } from '../models/entities/User'; +import SeedUsers from '../seeds/SeedUsers'; /** * Loader for the database that creates the database connection and initializes the database tabels. */ export default async () => { const connection = await createConnection(); - connection.synchronize(); + await connection.synchronize(); + if (await connection.getRepository(User).count() === 0) { + await runSeeder(SeedUsers); + } return connection; }; \ No newline at end of file diff --git a/src/seeds/SeedUsers.ts b/src/seeds/SeedUsers.ts new file mode 100644 index 0000000..9db0fd7 --- /dev/null +++ b/src/seeds/SeedUsers.ts @@ -0,0 +1,20 @@ +import { Connection } from 'typeorm'; +import { Factory, Seeder } from 'typeorm-seeding'; +import { CreateUser } from '../models/actions/CreateUser'; +import { User } from '../models/entities/User'; + +export default class SeedUsers implements Seeder { + public async run(factory: Factory, connection: Connection): Promise { + let initialUser = new CreateUser(); + initialUser.firstname = "demo"; + initialUser.lastname = "demo"; + initialUser.username = "demo"; + initialUser.password = "demo"; + await connection + .createQueryBuilder() + .insert() + .into(User) + .values([await initialUser.toUser()]) + .execute() + } +} \ No newline at end of file