Initial LisgloSIPS V2 implementation
This commit is contained in:
@@ -0,0 +1,617 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE `customers` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`name` VARCHAR(120) NOT NULL,
|
||||
`contact_name` VARCHAR(80) NULL,
|
||||
`phone` VARCHAR(32) NULL,
|
||||
`email` VARCHAR(160) NULL,
|
||||
`domain` VARCHAR(160) NULL,
|
||||
`status` ENUM('ENABLED', 'DISABLED') NOT NULL DEFAULT 'ENABLED',
|
||||
`billing_mode` ENUM('PREPAID', 'POSTPAID') NOT NULL DEFAULT 'PREPAID',
|
||||
`balance` DECIMAL(20, 6) NOT NULL DEFAULT 0,
|
||||
`credit_limit` DECIMAL(20, 6) NOT NULL DEFAULT 0,
|
||||
`min_balance` DECIMAL(20, 6) NOT NULL DEFAULT 0,
|
||||
`notes` VARCHAR(500) NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
`updated_by` VARCHAR(32) NULL,
|
||||
`version` INTEGER NOT NULL DEFAULT 1,
|
||||
`deleted_at` DATETIME(3) NULL,
|
||||
|
||||
UNIQUE INDEX `customers_name_key`(`name`),
|
||||
UNIQUE INDEX `customers_domain_key`(`domain`),
|
||||
INDEX `customers_status_idx`(`status`),
|
||||
INDEX `customers_deleted_at_idx`(`deleted_at`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `customer_gateways` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`customer_id` VARCHAR(32) NOT NULL,
|
||||
`name` VARCHAR(120) NOT NULL,
|
||||
`auth_mode` ENUM('IP', 'SIP_DIGEST', 'MIXED') NOT NULL,
|
||||
`source_ip` VARCHAR(45) NULL,
|
||||
`sip_username` VARCHAR(120) NULL,
|
||||
`sip_domain` VARCHAR(160) NULL,
|
||||
`sip_ha1` VARCHAR(128) NULL,
|
||||
`status` ENUM('ENABLED', 'DISABLED') NOT NULL DEFAULT 'ENABLED',
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
`updated_by` VARCHAR(32) NULL,
|
||||
`version` INTEGER NOT NULL DEFAULT 1,
|
||||
`deleted_at` DATETIME(3) NULL,
|
||||
|
||||
INDEX `customer_gateways_customer_id_status_idx`(`customer_id`, `status`),
|
||||
INDEX `customer_gateways_source_ip_idx`(`source_ip`),
|
||||
INDEX `customer_gateways_deleted_at_idx`(`deleted_at`),
|
||||
UNIQUE INDEX `customer_gateways_customer_id_name_key`(`customer_id`, `name`),
|
||||
UNIQUE INDEX `customer_gateways_sip_username_sip_domain_key`(`sip_username`, `sip_domain`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `customer_gateway_policies` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`customer_id` VARCHAR(32) NOT NULL,
|
||||
`gateway_id` VARCHAR(32) NOT NULL,
|
||||
`line_group_id` VARCHAR(32) NOT NULL,
|
||||
`name` VARCHAR(120) NOT NULL,
|
||||
`priority` INTEGER NOT NULL,
|
||||
`caller_mode` ENUM('ANY', 'EQUALS', 'PREFIX') NOT NULL DEFAULT 'ANY',
|
||||
`caller_value` VARCHAR(64) NULL,
|
||||
`callee_mode` ENUM('ANY', 'EQUALS', 'PREFIX') NOT NULL DEFAULT 'ANY',
|
||||
`callee_value` VARCHAR(64) NULL,
|
||||
`status` ENUM('ENABLED', 'DISABLED') NOT NULL DEFAULT 'ENABLED',
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
`updated_by` VARCHAR(32) NULL,
|
||||
`version` INTEGER NOT NULL DEFAULT 1,
|
||||
`deleted_at` DATETIME(3) NULL,
|
||||
|
||||
INDEX `customer_gateway_policies_customer_id_status_idx`(`customer_id`, `status`),
|
||||
INDEX `customer_gateway_policies_line_group_id_idx`(`line_group_id`),
|
||||
INDEX `customer_gateway_policies_deleted_at_idx`(`deleted_at`),
|
||||
UNIQUE INDEX `customer_gateway_policies_gateway_id_priority_key`(`gateway_id`, `priority`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `customer_recharges` (
|
||||
`id` VARCHAR(40) NOT NULL,
|
||||
`customer_id` VARCHAR(32) NOT NULL,
|
||||
`amount` DECIMAL(20, 6) NOT NULL,
|
||||
`before_balance` DECIMAL(20, 6) NOT NULL,
|
||||
`after_balance` DECIMAL(20, 6) NOT NULL,
|
||||
`idempotency_key` VARCHAR(128) NOT NULL,
|
||||
`remark` VARCHAR(500) NULL,
|
||||
`status` ENUM('SUCCEEDED', 'FAILED', 'REVERSED') NOT NULL DEFAULT 'SUCCEEDED',
|
||||
`occurred_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
|
||||
UNIQUE INDEX `customer_recharges_idempotency_key_key`(`idempotency_key`),
|
||||
INDEX `customer_recharges_customer_id_occurred_at_idx`(`customer_id`, `occurred_at`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `vendors` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`name` VARCHAR(120) NOT NULL,
|
||||
`contact_name` VARCHAR(80) NULL,
|
||||
`phone` VARCHAR(32) NULL,
|
||||
`email` VARCHAR(160) NULL,
|
||||
`status` ENUM('ENABLED', 'DISABLED') NOT NULL DEFAULT 'ENABLED',
|
||||
`balance` DECIMAL(20, 6) NOT NULL DEFAULT 0,
|
||||
`credit_limit` DECIMAL(20, 6) NOT NULL DEFAULT 0,
|
||||
`settlement` VARCHAR(80) NULL,
|
||||
`notes` VARCHAR(500) NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
`updated_by` VARCHAR(32) NULL,
|
||||
`version` INTEGER NOT NULL DEFAULT 1,
|
||||
`deleted_at` DATETIME(3) NULL,
|
||||
|
||||
UNIQUE INDEX `vendors_name_key`(`name`),
|
||||
INDEX `vendors_status_idx`(`status`),
|
||||
INDEX `vendors_deleted_at_idx`(`deleted_at`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `vendor_recharges` (
|
||||
`id` VARCHAR(40) NOT NULL,
|
||||
`vendor_id` VARCHAR(32) NOT NULL,
|
||||
`amount` DECIMAL(20, 6) NOT NULL,
|
||||
`before_balance` DECIMAL(20, 6) NOT NULL,
|
||||
`after_balance` DECIMAL(20, 6) NOT NULL,
|
||||
`idempotency_key` VARCHAR(128) NOT NULL,
|
||||
`remark` VARCHAR(500) NULL,
|
||||
`status` ENUM('SUCCEEDED', 'FAILED', 'REVERSED') NOT NULL DEFAULT 'SUCCEEDED',
|
||||
`occurred_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
|
||||
UNIQUE INDEX `vendor_recharges_idempotency_key_key`(`idempotency_key`),
|
||||
INDEX `vendor_recharges_vendor_id_occurred_at_idx`(`vendor_id`, `occurred_at`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `vendor_gateways` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`vendor_id` VARCHAR(32) NOT NULL,
|
||||
`name` VARCHAR(120) NOT NULL,
|
||||
`auth_mode` ENUM('IP', 'SIP_DIGEST', 'MIXED') NOT NULL,
|
||||
`host` VARCHAR(160) NOT NULL,
|
||||
`port` INTEGER NOT NULL DEFAULT 5060,
|
||||
`transport` VARCHAR(16) NOT NULL DEFAULT 'udp',
|
||||
`sip_username` VARCHAR(120) NULL,
|
||||
`sip_ha1` VARCHAR(128) NULL,
|
||||
`cps_limit` INTEGER NOT NULL DEFAULT 0,
|
||||
`concurrency_limit` INTEGER NOT NULL DEFAULT 0,
|
||||
`billing_cycle_sec` INTEGER NOT NULL DEFAULT 60,
|
||||
`cycle_rate` DECIMAL(20, 6) NOT NULL DEFAULT 0,
|
||||
`status` ENUM('ENABLED', 'DISABLED') NOT NULL DEFAULT 'ENABLED',
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
`updated_by` VARCHAR(32) NULL,
|
||||
`version` INTEGER NOT NULL DEFAULT 1,
|
||||
`deleted_at` DATETIME(3) NULL,
|
||||
|
||||
INDEX `vendor_gateways_vendor_id_status_idx`(`vendor_id`, `status`),
|
||||
INDEX `vendor_gateways_host_idx`(`host`),
|
||||
INDEX `vendor_gateways_deleted_at_idx`(`deleted_at`),
|
||||
UNIQUE INDEX `vendor_gateways_vendor_id_name_key`(`vendor_id`, `name`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `vendor_gateway_forbidden_periods` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`vendor_gateway_id` VARCHAR(32) NOT NULL,
|
||||
`weekday_mask` INTEGER NOT NULL,
|
||||
`start_time` VARCHAR(8) NOT NULL,
|
||||
`end_time` VARCHAR(8) NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
`updated_by` VARCHAR(32) NULL,
|
||||
`version` INTEGER NOT NULL DEFAULT 1,
|
||||
|
||||
INDEX `vendor_gateway_forbidden_periods_vendor_gateway_id_idx`(`vendor_gateway_id`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `vendor_gateway_codecs` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`vendor_gateway_id` VARCHAR(32) NOT NULL,
|
||||
`codec` VARCHAR(32) NOT NULL,
|
||||
`priority` INTEGER NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
`updated_by` VARCHAR(32) NULL,
|
||||
`version` INTEGER NOT NULL DEFAULT 1,
|
||||
|
||||
UNIQUE INDEX `vendor_gateway_codecs_vendor_gateway_id_codec_key`(`vendor_gateway_id`, `codec`),
|
||||
UNIQUE INDEX `vendor_gateway_codecs_vendor_gateway_id_priority_key`(`vendor_gateway_id`, `priority`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `vendor_gateway_prefix_rules` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`vendor_gateway_id` VARCHAR(32) NOT NULL,
|
||||
`direction` ENUM('CALLER', 'CALLEE') NOT NULL,
|
||||
`match_prefix` VARCHAR(32) NOT NULL,
|
||||
`replace_prefix` VARCHAR(32) NOT NULL,
|
||||
`priority` INTEGER NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
`updated_by` VARCHAR(32) NULL,
|
||||
`version` INTEGER NOT NULL DEFAULT 1,
|
||||
|
||||
INDEX `vendor_gateway_prefix_rules_vendor_gateway_id_direction_idx`(`vendor_gateway_id`, `direction`),
|
||||
UNIQUE INDEX `vendor_gateway_prefix_rules_vendor_gateway_id_direction_prio_key`(`vendor_gateway_id`, `direction`, `priority`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `landing_line_groups` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`name` VARCHAR(120) NOT NULL,
|
||||
`status` ENUM('ENABLED', 'DISABLED') NOT NULL DEFAULT 'ENABLED',
|
||||
`notes` VARCHAR(500) NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
`updated_by` VARCHAR(32) NULL,
|
||||
`version` INTEGER NOT NULL DEFAULT 1,
|
||||
`deleted_at` DATETIME(3) NULL,
|
||||
|
||||
UNIQUE INDEX `landing_line_groups_name_key`(`name`),
|
||||
INDEX `landing_line_groups_status_idx`(`status`),
|
||||
INDEX `landing_line_groups_deleted_at_idx`(`deleted_at`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `landing_line_group_items` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`line_group_id` VARCHAR(32) NOT NULL,
|
||||
`vendor_gateway_id` VARCHAR(32) NOT NULL,
|
||||
`priority` INTEGER NOT NULL,
|
||||
`weight` INTEGER NOT NULL DEFAULT 1,
|
||||
`concurrency_cap` INTEGER NOT NULL DEFAULT 0,
|
||||
`status` ENUM('ENABLED', 'DISABLED') NOT NULL DEFAULT 'ENABLED',
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
`updated_by` VARCHAR(32) NULL,
|
||||
`version` INTEGER NOT NULL DEFAULT 1,
|
||||
|
||||
INDEX `landing_line_group_items_vendor_gateway_id_idx`(`vendor_gateway_id`),
|
||||
UNIQUE INDEX `landing_line_group_items_line_group_id_vendor_gateway_id_key`(`line_group_id`, `vendor_gateway_id`),
|
||||
UNIQUE INDEX `landing_line_group_items_line_group_id_priority_key`(`line_group_id`, `priority`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `raw_cdrs` (
|
||||
`id` VARCHAR(40) NOT NULL,
|
||||
`event_id` VARCHAR(64) NOT NULL,
|
||||
`call_id` VARCHAR(255) NOT NULL,
|
||||
`customer_id` VARCHAR(32) NULL,
|
||||
`customer_gateway_id` VARCHAR(32) NULL,
|
||||
`customer_gateway_policy_id` VARCHAR(32) NULL,
|
||||
`source_ip` VARCHAR(45) NULL,
|
||||
`caller` VARCHAR(64) NOT NULL,
|
||||
`callee` VARCHAR(64) NOT NULL,
|
||||
`vendor_id` VARCHAR(32) NULL,
|
||||
`vendor_gateway_id` VARCHAR(32) NULL,
|
||||
`line_group_id` VARCHAR(32) NULL,
|
||||
`started_at` DATETIME(3) NOT NULL,
|
||||
`answered_at` DATETIME(3) NULL,
|
||||
`ended_at` DATETIME(3) NOT NULL,
|
||||
`duration_sec` INTEGER NOT NULL DEFAULT 0,
|
||||
`sip_code` INTEGER NOT NULL,
|
||||
`hangup_reason` VARCHAR(120) NULL,
|
||||
`recording_key` VARCHAR(255) NULL,
|
||||
`config_version` INTEGER NULL,
|
||||
`rating_status` ENUM('UNRATED', 'RATED', 'SKIPPED', 'FAILED') NOT NULL DEFAULT 'UNRATED',
|
||||
`payload` JSON NULL,
|
||||
`received_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
UNIQUE INDEX `raw_cdrs_event_id_key`(`event_id`),
|
||||
INDEX `raw_cdrs_customer_id_started_at_idx`(`customer_id`, `started_at`),
|
||||
INDEX `raw_cdrs_vendor_id_started_at_idx`(`vendor_id`, `started_at`),
|
||||
INDEX `raw_cdrs_sip_code_idx`(`sip_code`),
|
||||
INDEX `raw_cdrs_rating_status_idx`(`rating_status`),
|
||||
UNIQUE INDEX `raw_cdrs_call_id_ended_at_key`(`call_id`, `ended_at`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `rated_cdrs` (
|
||||
`id` VARCHAR(40) NOT NULL,
|
||||
`raw_cdr_id` VARCHAR(40) NOT NULL,
|
||||
`bill_sec` INTEGER NOT NULL,
|
||||
`customer_fee` DECIMAL(20, 6) NOT NULL DEFAULT 0,
|
||||
`vendor_cost` DECIMAL(20, 6) NOT NULL DEFAULT 0,
|
||||
`gross_profit` DECIMAL(20, 6) NOT NULL DEFAULT 0,
|
||||
`customer_rate` JSON NULL,
|
||||
`vendor_rate` JSON NULL,
|
||||
`rated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
UNIQUE INDEX `rated_cdrs_raw_cdr_id_key`(`raw_cdr_id`),
|
||||
INDEX `rated_cdrs_rated_at_idx`(`rated_at`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `recordings` (
|
||||
`id` VARCHAR(40) NOT NULL,
|
||||
`raw_cdr_id` VARCHAR(40) NULL,
|
||||
`storage_key` VARCHAR(255) NOT NULL,
|
||||
`storage_path` VARCHAR(500) NOT NULL,
|
||||
`sha256` CHAR(64) NULL,
|
||||
`bytes` BIGINT NOT NULL DEFAULT 0,
|
||||
`duration_sec` INTEGER NOT NULL DEFAULT 0,
|
||||
`status` ENUM('PENDING', 'READY', 'FAILED', 'DELETED') NOT NULL DEFAULT 'PENDING',
|
||||
`moved_at` DATETIME(3) NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
|
||||
UNIQUE INDEX `recordings_raw_cdr_id_key`(`raw_cdr_id`),
|
||||
UNIQUE INDEX `recordings_storage_key_key`(`storage_key`),
|
||||
INDEX `recordings_status_created_at_idx`(`status`, `created_at`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `quality_sampling_rules` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`name` VARCHAR(120) NOT NULL,
|
||||
`customer_id` VARCHAR(32) NULL,
|
||||
`line_group_id` VARCHAR(32) NULL,
|
||||
`ratio` DECIMAL(5, 2) NOT NULL,
|
||||
`status` ENUM('ENABLED', 'DISABLED') NOT NULL DEFAULT 'ENABLED',
|
||||
`effective_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`expires_at` DATETIME(3) NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
`updated_by` VARCHAR(32) NULL,
|
||||
`version` INTEGER NOT NULL DEFAULT 1,
|
||||
`deleted_at` DATETIME(3) NULL,
|
||||
|
||||
INDEX `quality_sampling_rules_customer_id_status_idx`(`customer_id`, `status`),
|
||||
INDEX `quality_sampling_rules_line_group_id_status_idx`(`line_group_id`, `status`),
|
||||
INDEX `quality_sampling_rules_deleted_at_idx`(`deleted_at`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `quality_reviews` (
|
||||
`id` VARCHAR(40) NOT NULL,
|
||||
`recording_id` VARCHAR(40) NOT NULL,
|
||||
`reviewer_id` VARCHAR(32) NOT NULL,
|
||||
`score` INTEGER NULL,
|
||||
`result` ENUM('PASS', 'ISSUE', 'ESCALATED') NOT NULL,
|
||||
`issue_tags` JSON NULL,
|
||||
`notes` VARCHAR(1000) NULL,
|
||||
`reviewed_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`version` INTEGER NOT NULL DEFAULT 1,
|
||||
|
||||
INDEX `quality_reviews_recording_id_idx`(`recording_id`),
|
||||
INDEX `quality_reviews_reviewer_id_reviewed_at_idx`(`reviewer_id`, `reviewed_at`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `users` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`username` VARCHAR(80) NOT NULL,
|
||||
`display_name` VARCHAR(80) NOT NULL,
|
||||
`phone` VARCHAR(32) NULL,
|
||||
`email` VARCHAR(160) NULL,
|
||||
`password_hash` VARCHAR(255) NULL,
|
||||
`password_algo` VARCHAR(32) NULL,
|
||||
`status` ENUM('ENABLED', 'DISABLED') NOT NULL DEFAULT 'ENABLED',
|
||||
`failed_login_count` INTEGER NOT NULL DEFAULT 0,
|
||||
`locked_until` DATETIME(3) NULL,
|
||||
`require_password_change` BOOLEAN NOT NULL DEFAULT false,
|
||||
`last_login_at` DATETIME(3) NULL,
|
||||
`last_login_ip` VARCHAR(45) NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
`updated_by` VARCHAR(32) NULL,
|
||||
`version` INTEGER NOT NULL DEFAULT 1,
|
||||
`deleted_at` DATETIME(3) NULL,
|
||||
|
||||
UNIQUE INDEX `users_username_key`(`username`),
|
||||
UNIQUE INDEX `users_email_key`(`email`),
|
||||
INDEX `users_status_idx`(`status`),
|
||||
INDEX `users_deleted_at_idx`(`deleted_at`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `roles` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`name` VARCHAR(80) NOT NULL,
|
||||
`description` VARCHAR(300) NULL,
|
||||
`built_in` BOOLEAN NOT NULL DEFAULT false,
|
||||
`status` ENUM('ENABLED', 'DISABLED') NOT NULL DEFAULT 'ENABLED',
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
`updated_by` VARCHAR(32) NULL,
|
||||
`version` INTEGER NOT NULL DEFAULT 1,
|
||||
`deleted_at` DATETIME(3) NULL,
|
||||
|
||||
UNIQUE INDEX `roles_name_key`(`name`),
|
||||
INDEX `roles_status_idx`(`status`),
|
||||
INDEX `roles_deleted_at_idx`(`deleted_at`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `permissions` (
|
||||
`id` VARCHAR(80) NOT NULL,
|
||||
`module` VARCHAR(80) NOT NULL,
|
||||
`action` VARCHAR(80) NOT NULL,
|
||||
`description` VARCHAR(300) NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
|
||||
UNIQUE INDEX `permissions_module_action_key`(`module`, `action`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `user_roles` (
|
||||
`user_id` VARCHAR(32) NOT NULL,
|
||||
`role_id` VARCHAR(32) NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
|
||||
INDEX `user_roles_role_id_idx`(`role_id`),
|
||||
PRIMARY KEY (`user_id`, `role_id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `role_permissions` (
|
||||
`role_id` VARCHAR(32) NOT NULL,
|
||||
`permission_id` VARCHAR(80) NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`created_by` VARCHAR(32) NULL,
|
||||
|
||||
INDEX `role_permissions_permission_id_idx`(`permission_id`),
|
||||
PRIMARY KEY (`role_id`, `permission_id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `audit_logs` (
|
||||
`id` VARCHAR(40) NOT NULL,
|
||||
`request_id` VARCHAR(64) NOT NULL,
|
||||
`user_id` VARCHAR(32) NULL,
|
||||
`username` VARCHAR(80) NULL,
|
||||
`role_names` VARCHAR(300) NULL,
|
||||
`ip` VARCHAR(45) NULL,
|
||||
`user_agent` VARCHAR(500) NULL,
|
||||
`module` VARCHAR(80) NOT NULL,
|
||||
`action` VARCHAR(80) NOT NULL,
|
||||
`object_type` VARCHAR(80) NOT NULL,
|
||||
`object_id` VARCHAR(80) NULL,
|
||||
`before_summary` JSON NULL,
|
||||
`after_summary` JSON NULL,
|
||||
`result` ENUM('SUCCESS', 'FAILURE') NOT NULL,
|
||||
`error_code` VARCHAR(80) NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
INDEX `audit_logs_user_id_created_at_idx`(`user_id`, `created_at`),
|
||||
INDEX `audit_logs_module_action_created_at_idx`(`module`, `action`, `created_at`),
|
||||
INDEX `audit_logs_object_type_object_id_idx`(`object_type`, `object_id`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `outbox_events` (
|
||||
`id` VARCHAR(40) NOT NULL,
|
||||
`aggregate_type` VARCHAR(80) NOT NULL,
|
||||
`aggregate_id` VARCHAR(80) NOT NULL,
|
||||
`event_type` VARCHAR(120) NOT NULL,
|
||||
`payload` JSON NOT NULL,
|
||||
`status` ENUM('PENDING', 'PROCESSING', 'PUBLISHED', 'FAILED') NOT NULL DEFAULT 'PENDING',
|
||||
`attempts` INTEGER NOT NULL DEFAULT 0,
|
||||
`available_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`locked_at` DATETIME(3) NULL,
|
||||
`processed_at` DATETIME(3) NULL,
|
||||
`last_error` VARCHAR(1000) NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
|
||||
INDEX `outbox_events_status_available_at_idx`(`status`, `available_at`),
|
||||
INDEX `outbox_events_aggregate_type_aggregate_id_idx`(`aggregate_type`, `aggregate_id`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `idempotency_keys` (
|
||||
`id` VARCHAR(40) NOT NULL,
|
||||
`key` VARCHAR(128) NOT NULL,
|
||||
`scope` VARCHAR(80) NOT NULL,
|
||||
`request_hash` CHAR(64) NOT NULL,
|
||||
`response_status` INTEGER NULL,
|
||||
`response_body` JSON NULL,
|
||||
`status` ENUM('IN_PROGRESS', 'SUCCEEDED', 'FAILED', 'EXPIRED') NOT NULL DEFAULT 'IN_PROGRESS',
|
||||
`locked_until` DATETIME(3) NULL,
|
||||
`expires_at` DATETIME(3) NOT NULL,
|
||||
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`updated_at` DATETIME(3) NOT NULL,
|
||||
|
||||
UNIQUE INDEX `idempotency_keys_key_key`(`key`),
|
||||
INDEX `idempotency_keys_scope_status_idx`(`scope`, `status`),
|
||||
INDEX `idempotency_keys_expires_at_idx`(`expires_at`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `customer_gateways` ADD CONSTRAINT `customer_gateways_customer_id_fkey` FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `customer_gateway_policies` ADD CONSTRAINT `customer_gateway_policies_customer_id_fkey` FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `customer_gateway_policies` ADD CONSTRAINT `customer_gateway_policies_gateway_id_fkey` FOREIGN KEY (`gateway_id`) REFERENCES `customer_gateways`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `customer_gateway_policies` ADD CONSTRAINT `customer_gateway_policies_line_group_id_fkey` FOREIGN KEY (`line_group_id`) REFERENCES `landing_line_groups`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `customer_recharges` ADD CONSTRAINT `customer_recharges_customer_id_fkey` FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `vendor_recharges` ADD CONSTRAINT `vendor_recharges_vendor_id_fkey` FOREIGN KEY (`vendor_id`) REFERENCES `vendors`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `vendor_gateways` ADD CONSTRAINT `vendor_gateways_vendor_id_fkey` FOREIGN KEY (`vendor_id`) REFERENCES `vendors`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `vendor_gateway_forbidden_periods` ADD CONSTRAINT `vendor_gateway_forbidden_periods_vendor_gateway_id_fkey` FOREIGN KEY (`vendor_gateway_id`) REFERENCES `vendor_gateways`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `vendor_gateway_codecs` ADD CONSTRAINT `vendor_gateway_codecs_vendor_gateway_id_fkey` FOREIGN KEY (`vendor_gateway_id`) REFERENCES `vendor_gateways`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `vendor_gateway_prefix_rules` ADD CONSTRAINT `vendor_gateway_prefix_rules_vendor_gateway_id_fkey` FOREIGN KEY (`vendor_gateway_id`) REFERENCES `vendor_gateways`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `landing_line_group_items` ADD CONSTRAINT `landing_line_group_items_line_group_id_fkey` FOREIGN KEY (`line_group_id`) REFERENCES `landing_line_groups`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `landing_line_group_items` ADD CONSTRAINT `landing_line_group_items_vendor_gateway_id_fkey` FOREIGN KEY (`vendor_gateway_id`) REFERENCES `vendor_gateways`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `raw_cdrs` ADD CONSTRAINT `raw_cdrs_customer_id_fkey` FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `raw_cdrs` ADD CONSTRAINT `raw_cdrs_customer_gateway_id_fkey` FOREIGN KEY (`customer_gateway_id`) REFERENCES `customer_gateways`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `raw_cdrs` ADD CONSTRAINT `raw_cdrs_customer_gateway_policy_id_fkey` FOREIGN KEY (`customer_gateway_policy_id`) REFERENCES `customer_gateway_policies`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `raw_cdrs` ADD CONSTRAINT `raw_cdrs_vendor_id_fkey` FOREIGN KEY (`vendor_id`) REFERENCES `vendors`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `raw_cdrs` ADD CONSTRAINT `raw_cdrs_vendor_gateway_id_fkey` FOREIGN KEY (`vendor_gateway_id`) REFERENCES `vendor_gateways`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `raw_cdrs` ADD CONSTRAINT `raw_cdrs_line_group_id_fkey` FOREIGN KEY (`line_group_id`) REFERENCES `landing_line_groups`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `rated_cdrs` ADD CONSTRAINT `rated_cdrs_raw_cdr_id_fkey` FOREIGN KEY (`raw_cdr_id`) REFERENCES `raw_cdrs`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `recordings` ADD CONSTRAINT `recordings_raw_cdr_id_fkey` FOREIGN KEY (`raw_cdr_id`) REFERENCES `raw_cdrs`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `quality_sampling_rules` ADD CONSTRAINT `quality_sampling_rules_customer_id_fkey` FOREIGN KEY (`customer_id`) REFERENCES `customers`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `quality_sampling_rules` ADD CONSTRAINT `quality_sampling_rules_line_group_id_fkey` FOREIGN KEY (`line_group_id`) REFERENCES `landing_line_groups`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `quality_reviews` ADD CONSTRAINT `quality_reviews_recording_id_fkey` FOREIGN KEY (`recording_id`) REFERENCES `recordings`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `quality_reviews` ADD CONSTRAINT `quality_reviews_reviewer_id_fkey` FOREIGN KEY (`reviewer_id`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `user_roles` ADD CONSTRAINT `user_roles_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `user_roles` ADD CONSTRAINT `user_roles_role_id_fkey` FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `role_permissions` ADD CONSTRAINT `role_permissions_role_id_fkey` FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `role_permissions` ADD CONSTRAINT `role_permissions_permission_id_fkey` FOREIGN KEY (`permission_id`) REFERENCES `permissions`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
Reference in New Issue
Block a user