feat(data) seed default admin
continuous-integration/drone/tag Build is passing Details

pull/2/head devel_1.1
ashar 2024-06-04 10:11:07 +07:00
parent 1641c81a53
commit 1ac5aca57d
7 changed files with 71 additions and 8 deletions

10
env/env.development vendored
View File

@ -6,11 +6,11 @@ JWT_REFRESH_EXPIRES="7d"
ENC_KEY="921c83f3b90c92dca4ba9b947f99b4c9" ENC_KEY="921c83f3b90c92dca4ba9b947f99b4c9"
IV="a671a96159e97a4f" IV="a671a96159e97a4f"
DEFAULT_DB_HOST="localhost" DEFAULT_DB_HOST="172.10.10.2"
DEFAULT_DB_PORT="5432" DEFAULT_DB_PORT="5411"
DEFAULT_DB_USER="postgres" DEFAULT_DB_USER="root"
DEFAULT_DB_PASS="secret" DEFAULT_DB_PASS="password"
DEFAULT_DB_NAME="skyworld_pos" DEFAULT_DB_NAME="pos"
ELASTIC_APM_ACTIVATE=true ELASTIC_APM_ACTIVATE=true
ELASTIC_APM_SERVICE_NAME="Skyworld POS" ELASTIC_APM_SERVICE_NAME="Skyworld POS"

View File

@ -19,7 +19,9 @@
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "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", "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", "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": { "dependencies": {
"@nestjs/common": "^10.0.0", "@nestjs/common": "^10.0.0",

View File

@ -1,3 +1,4 @@
export const SALT_OR_ROUNDS = +process.env.SALT_OR_ROUNDS ?? 10;
export enum STATUS { export enum STATUS {
ACTIVE = 'active', ACTIVE = 'active',
CANCEL = 'cancel', CANCEL = 'cancel',

View File

@ -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,
};

View File

@ -1,9 +1,15 @@
import { MigrationInterface, QueryRunner } from 'typeorm'; import { MigrationInterface, QueryRunner } from 'typeorm';
export class User1717401535006 implements MigrationInterface { export class User1717470361050 implements MigrationInterface {
name = 'User1717401535006'; name = 'User1717470361050';
public async up(queryRunner: QueryRunner): Promise<void> { public async up(queryRunner: QueryRunner): Promise<void> {
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( 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"))`, `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"`, `ALTER TABLE "users" DROP CONSTRAINT "FK_a575428fc6718f1394eff0d8443"`,
); );
await queryRunner.query(`DROP TABLE "users"`); await queryRunner.query(`DROP TABLE "users"`);
await queryRunner.query(`DROP TYPE "public"."users_role_enum"`);
await queryRunner.query(`DROP TYPE "public"."users_status_enum"`);
} }
} }

View File

@ -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}'],
};

View File

@ -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<void> {
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');
}
}
}