ticket master
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class AddTicketMasterEntity1785000000000 implements MigrationInterface {
|
||||
name = "AddTicketMasterEntity1785000000000";
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(
|
||||
`CREATE TABLE "ticket_master" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "userId" uuid NOT NULL, CONSTRAINT "UQ_ticket_master_user" UNIQUE ("userId"), CONSTRAINT "PK_ticket_master" PRIMARY KEY ("id"))`,
|
||||
);
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "ticket_master" ADD CONSTRAINT "FK_ticket_master_user" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
|
||||
);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "ticket_master" DROP CONSTRAINT "FK_ticket_master_user"`);
|
||||
await queryRunner.query(`DROP TABLE "ticket_master"`);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
const NEW_PERMISSIONS = [
|
||||
{ name: "ticket_masters_create", title: "ایجاد مستر تیکت", source: "tickets_create" },
|
||||
{ name: "ticket_masters_read", title: "مشاهده مستر تیکت", source: "tickets_read" },
|
||||
{ name: "ticket_masters_update", title: "ویرایش مستر تیکت", source: "tickets_update" },
|
||||
{ name: "ticket_masters_delete", title: "حذف مستر تیکت", source: "tickets_delete" },
|
||||
] as const;
|
||||
|
||||
const CURRENT_ENUM_VALUES = [
|
||||
"services_create",
|
||||
"services_read",
|
||||
"services_update",
|
||||
"services_delete",
|
||||
"customers_create",
|
||||
"customers_read",
|
||||
"customers_update",
|
||||
"customers_delete",
|
||||
"agents_create",
|
||||
"agents_read",
|
||||
"agents_update",
|
||||
"agents_delete",
|
||||
"developers_create",
|
||||
"developers_read",
|
||||
"developers_update",
|
||||
"developers_delete",
|
||||
"invoices_create",
|
||||
"invoices_read",
|
||||
"invoices_update",
|
||||
"invoices_delete",
|
||||
"transactions_create",
|
||||
"transactions_read",
|
||||
"transactions_update",
|
||||
"transactions_delete",
|
||||
"discounts_create",
|
||||
"discounts_read",
|
||||
"discounts_update",
|
||||
"discounts_delete",
|
||||
"admins_create",
|
||||
"admins_read",
|
||||
"admins_update",
|
||||
"admins_delete",
|
||||
"tickets_create",
|
||||
"tickets_read",
|
||||
"tickets_update",
|
||||
"tickets_delete",
|
||||
"ticket_categories_create",
|
||||
"ticket_categories_read",
|
||||
"ticket_categories_update",
|
||||
"ticket_categories_delete",
|
||||
"criticisms_create",
|
||||
"criticisms_read",
|
||||
"criticisms_update",
|
||||
"criticisms_delete",
|
||||
"contacts_us_create",
|
||||
"contacts_us_read",
|
||||
"contacts_us_update",
|
||||
"contacts_us_delete",
|
||||
"advertisements_create",
|
||||
"advertisements_read",
|
||||
"advertisements_update",
|
||||
"advertisements_delete",
|
||||
"announcements_create",
|
||||
"announcements_read",
|
||||
"announcements_update",
|
||||
"announcements_delete",
|
||||
"blogs_create",
|
||||
"blogs_read",
|
||||
"blogs_update",
|
||||
"blogs_delete",
|
||||
"learnings_create",
|
||||
"learnings_read",
|
||||
"learnings_update",
|
||||
"learnings_delete",
|
||||
"settings_create",
|
||||
"settings_read",
|
||||
"settings_update",
|
||||
"settings_delete",
|
||||
"bank_accounts_create",
|
||||
"bank_accounts_read",
|
||||
"bank_accounts_update",
|
||||
"bank_accounts_delete",
|
||||
"payments_create",
|
||||
"payments_read",
|
||||
"payments_update",
|
||||
"payments_delete",
|
||||
"support_plan_create",
|
||||
"support_plan_read",
|
||||
"support_plan_update",
|
||||
"support_plan_delete",
|
||||
"reseller_create",
|
||||
"reseller_read",
|
||||
"reseller_update",
|
||||
"reseller_delete",
|
||||
"workspace_create",
|
||||
"workspace_read",
|
||||
"workspace_update",
|
||||
"workspace_delete",
|
||||
"project_create",
|
||||
"project_read",
|
||||
"project_update",
|
||||
"project_delete",
|
||||
"task_create",
|
||||
"task_read",
|
||||
"task_update",
|
||||
"task_delete",
|
||||
"task_phase_create",
|
||||
"task_phase_read",
|
||||
"task_phase_update",
|
||||
"task_phase_delete",
|
||||
"logs",
|
||||
"manage_sso_clients",
|
||||
"dmenu",
|
||||
"dkala",
|
||||
"dpage",
|
||||
"dmail",
|
||||
"view_all_workspaces",
|
||||
"view_all_projects",
|
||||
];
|
||||
|
||||
const UPDATED_ENUM_VALUES = [
|
||||
...CURRENT_ENUM_VALUES.slice(0, CURRENT_ENUM_VALUES.indexOf("ticket_categories_delete") + 1),
|
||||
...NEW_PERMISSIONS.map((p) => p.name),
|
||||
...CURRENT_ENUM_VALUES.slice(CURRENT_ENUM_VALUES.indexOf("ticket_categories_delete") + 1),
|
||||
];
|
||||
|
||||
export class AddTicketMastersPermissions1785100000000 implements MigrationInterface {
|
||||
name = "AddTicketMastersPermissions1785100000000";
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "permission" ALTER COLUMN "name" TYPE text USING "name"::text`);
|
||||
await queryRunner.query(`DROP TYPE "public"."permission_name_enum"`);
|
||||
|
||||
const enumList = UPDATED_ENUM_VALUES.map((v) => `'${v}'`).join(", ");
|
||||
await queryRunner.query(`CREATE TYPE "public"."permission_name_enum" AS ENUM(${enumList})`);
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "permission" ALTER COLUMN "name" TYPE "public"."permission_name_enum" USING "name"::"public"."permission_name_enum"`,
|
||||
);
|
||||
|
||||
for (const perm of NEW_PERMISSIONS) {
|
||||
const inserted = await queryRunner.query(
|
||||
`INSERT INTO "permission" ("id", "name", "title", "group", "createdAt", "updatedAt")
|
||||
VALUES (uuid_generate_v4(), $1, $2, 'support', NOW(), NOW())
|
||||
RETURNING id`,
|
||||
[perm.name, perm.title],
|
||||
);
|
||||
const newId = inserted[0].id as string;
|
||||
|
||||
const sourcePerm = await queryRunner.query(`SELECT id FROM "permission" WHERE "name" = $1`, [perm.source]);
|
||||
if (!sourcePerm.length) continue;
|
||||
|
||||
await queryRunner.query(
|
||||
`INSERT INTO "role_permission_relation" ("roleId", "permissionId")
|
||||
SELECT "roleId", $1 FROM "role_permission_relation" WHERE "permissionId" = $2
|
||||
ON CONFLICT ("roleId", "permissionId") DO NOTHING`,
|
||||
[newId, sourcePerm[0].id],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
for (const perm of NEW_PERMISSIONS) {
|
||||
const rows = await queryRunner.query(`SELECT id FROM "permission" WHERE "name" = $1`, [perm.name]);
|
||||
if (!rows.length) continue;
|
||||
|
||||
await queryRunner.query(`DELETE FROM "role_permission_relation" WHERE "permissionId" = $1`, [rows[0].id]);
|
||||
await queryRunner.query(`DELETE FROM "permission" WHERE "id" = $1`, [rows[0].id]);
|
||||
}
|
||||
|
||||
await queryRunner.query(`ALTER TABLE "permission" ALTER COLUMN "name" TYPE text USING "name"::text`);
|
||||
await queryRunner.query(`DROP TYPE "public"."permission_name_enum"`);
|
||||
|
||||
const enumList = CURRENT_ENUM_VALUES.map((v) => `'${v}'`).join(", ");
|
||||
await queryRunner.query(`CREATE TYPE "public"."permission_name_enum" AS ENUM(${enumList})`);
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "permission" ALTER COLUMN "name" TYPE "public"."permission_name_enum" USING "name"::"public"."permission_name_enum"`,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user