From 1ac5aca57d99ca759479a21b8989384f8eb8eb36 Mon Sep 17 00:00:00 2001 From: ashar Date: Tue, 4 Jun 2024 10:11:07 +0700 Subject: [PATCH] feat(data) seed default admin --- env/env.development | 10 +++---- package.json | 4 ++- src/core/strings/constants/base.constants.ts | 1 + .../constants/default-data.constants.ts | 9 ++++++ ...01535006-user.ts => 1717470361050-user.ts} | 12 ++++++-- src/database/seed-ormconfig.ts | 13 ++++++++ .../seeds/1717469402-default-admin.seed.ts | 30 +++++++++++++++++++ 7 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 src/core/strings/constants/default-data.constants.ts rename src/database/migrations/{1717401535006-user.ts => 1717470361050-user.ts} (68%) create mode 100644 src/database/seed-ormconfig.ts create mode 100644 src/database/seeds/1717469402-default-admin.seed.ts diff --git a/env/env.development b/env/env.development index e7e774d..0736f93 100644 --- a/env/env.development +++ b/env/env.development @@ -6,11 +6,11 @@ JWT_REFRESH_EXPIRES="7d" ENC_KEY="921c83f3b90c92dca4ba9b947f99b4c9" IV="a671a96159e97a4f" -DEFAULT_DB_HOST="localhost" -DEFAULT_DB_PORT="5432" -DEFAULT_DB_USER="postgres" -DEFAULT_DB_PASS="secret" -DEFAULT_DB_NAME="skyworld_pos" +DEFAULT_DB_HOST="172.10.10.2" +DEFAULT_DB_PORT="5411" +DEFAULT_DB_USER="root" +DEFAULT_DB_PASS="password" +DEFAULT_DB_NAME="pos" ELASTIC_APM_ACTIVATE=true ELASTIC_APM_SERVICE_NAME="Skyworld POS" diff --git a/package.json b/package.json index 1a78835..131bb02 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,9 @@ "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./test/jest-e2e.json", "orm": "ts-node --project ./tsconfig.json -r tsconfig-paths/register ./node_modules/typeorm/cli.js -d ./src/database/ormconfig.ts", - "migration:execute": "yarn run orm migration:run" + "migration:execute": "yarn run orm migration:run", + "seed:config": "ts-node -r tsconfig-paths/register ./node_modules/typeorm-seeding/dist/cli.js -n ./src/database/seed-ormconfig.ts config", + "seed:run": "ts-node -r tsconfig-paths/register ./node_modules/typeorm-seeding/dist/cli.js -n ./src/database/seed-ormconfig.ts seed" }, "dependencies": { "@nestjs/common": "^10.0.0", diff --git a/src/core/strings/constants/base.constants.ts b/src/core/strings/constants/base.constants.ts index e9edd83..bab60da 100644 --- a/src/core/strings/constants/base.constants.ts +++ b/src/core/strings/constants/base.constants.ts @@ -1,3 +1,4 @@ +export const SALT_OR_ROUNDS = +process.env.SALT_OR_ROUNDS ?? 10; export enum STATUS { ACTIVE = 'active', CANCEL = 'cancel', diff --git a/src/core/strings/constants/default-data.constants.ts b/src/core/strings/constants/default-data.constants.ts new file mode 100644 index 0000000..278cd8e --- /dev/null +++ b/src/core/strings/constants/default-data.constants.ts @@ -0,0 +1,9 @@ +import { UserRole } from 'src/modules/user-related/user/constants'; + +export const default_admin = { + id: 'c59f811e-873c-4472-bd58-21c111902114', + name: 'superadmin', + username: 'superadmin', + password: 'Eigen123!', + role: UserRole.SUPERADMIN, +}; diff --git a/src/database/migrations/1717401535006-user.ts b/src/database/migrations/1717470361050-user.ts similarity index 68% rename from src/database/migrations/1717401535006-user.ts rename to src/database/migrations/1717470361050-user.ts index 00425ea..fe9d28e 100644 --- a/src/database/migrations/1717401535006-user.ts +++ b/src/database/migrations/1717470361050-user.ts @@ -1,9 +1,15 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -export class User1717401535006 implements MigrationInterface { - name = 'User1717401535006'; +export class User1717470361050 implements MigrationInterface { + name = 'User1717470361050'; public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `CREATE TYPE "public"."users_status_enum" AS ENUM('active', 'cancel', 'confirmed', 'draft', 'expired', 'inactive', 'pending', 'refunded', 'rejected', 'settled', 'waiting')`, + ); + await queryRunner.query( + `CREATE TYPE "public"."users_role_enum" AS ENUM('superadmin', 'staff', 'tenant')`, + ); await queryRunner.query( `CREATE TABLE "users" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "creator_id" character varying(36), "creator_name" character varying(125), "editor_id" character varying(36), "editor_name" character varying(125), "created_at" bigint NOT NULL, "updated_at" bigint NOT NULL, "status" "public"."users_status_enum" NOT NULL DEFAULT 'draft', "refresh_token" character varying, "name" character varying, "username" character varying, "password" character varying, "email" character varying, "role" "public"."users_role_enum" NOT NULL DEFAULT 'staff', "user_privilege_id" uuid, CONSTRAINT "PK_a3ffb1c0c8416b9fc6f907b7433" PRIMARY KEY ("id"))`, ); @@ -17,5 +23,7 @@ export class User1717401535006 implements MigrationInterface { `ALTER TABLE "users" DROP CONSTRAINT "FK_a575428fc6718f1394eff0d8443"`, ); await queryRunner.query(`DROP TABLE "users"`); + await queryRunner.query(`DROP TYPE "public"."users_role_enum"`); + await queryRunner.query(`DROP TYPE "public"."users_status_enum"`); } } diff --git a/src/database/seed-ormconfig.ts b/src/database/seed-ormconfig.ts new file mode 100644 index 0000000..547050e --- /dev/null +++ b/src/database/seed-ormconfig.ts @@ -0,0 +1,13 @@ +module.exports = { + type: 'postgres', + host: process.env.DEFAULT_DB_HOST, + port: process.env.DEFAULT_DB_PORT, + username: process.env.DEFAULT_DB_USER, + password: process.env.DEFAULT_DB_PASS, + database: process.env.DEFAULT_DB_NAME, + logging: false, + synchronize: false, + entities: ['src/modules/**/**/data/models/*.ts'], + seeds: ['src/database/seeds/**/*{seed.ts,seed.js}'], + factories: ['src/database/factories/**/*{.ts,.js}'], +}; diff --git a/src/database/seeds/1717469402-default-admin.seed.ts b/src/database/seeds/1717469402-default-admin.seed.ts new file mode 100644 index 0000000..8362a88 --- /dev/null +++ b/src/database/seeds/1717469402-default-admin.seed.ts @@ -0,0 +1,30 @@ +import { hashPassword } from 'src/core/helpers/password/bcrypt.helpers'; +import { SALT_OR_ROUNDS } from 'src/core/strings/constants/base.constants'; +import { default_admin } from 'src/core/strings/constants/default-data.constants'; +import { UserModel } from 'src/modules/user-related/user/data/models/user.model'; +import { Connection } from 'typeorm'; +import { Factory, Seeder } from 'typeorm-seeding'; + +export class SeedDefaultAdmin implements Seeder { + public async run(factory: Factory, connection: Connection): Promise { + try { + const data = new UserModel(); + Object.assign(data, { + ...default_admin, + password: await hashPassword(default_admin.password, SALT_OR_ROUNDS), + created_at: new Date().getTime(), + updated_at: new Date().getTime(), + }); + + console.log(data, 'dsa'); + await connection + .createQueryBuilder() + .insert() + .into(UserModel) + .values([data]) + .execute(); + } catch (error) { + console.log(error, 'sdada'); + } + } +}