78 lines
2.9 KiB
SQL
78 lines
2.9 KiB
SQL
CREATE TABLE `sync_job` (
|
|
`id` INT NOT NULL AUTO_INCREMENT,
|
|
`sync_type` VARCHAR(30) NOT NULL,
|
|
`trigger_mode` VARCHAR(30) NOT NULL,
|
|
`status` VARCHAR(20) NOT NULL DEFAULT 'success',
|
|
`operator` VARCHAR(50) NULL,
|
|
`summary` TEXT NULL,
|
|
`result_payload` TEXT NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
PRIMARY KEY (`id`),
|
|
INDEX `sync_job_sync_type_created_at_idx`(`sync_type`, `created_at`),
|
|
INDEX `sync_job_status_created_at_idx`(`status`, `created_at`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `sync_change` (
|
|
`id` INT NOT NULL AUTO_INCREMENT,
|
|
`sync_job_id` INT NOT NULL,
|
|
`entity_type` VARCHAR(20) NOT NULL,
|
|
`entity_key` VARCHAR(100) NULL,
|
|
`entity_name` VARCHAR(100) NOT NULL,
|
|
`change_type` VARCHAR(50) NOT NULL,
|
|
`title` VARCHAR(150) NOT NULL,
|
|
`detail` TEXT NULL,
|
|
`before_snapshot` TEXT NULL,
|
|
`after_snapshot` TEXT NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
PRIMARY KEY (`id`),
|
|
INDEX `sync_change_sync_job_id_idx`(`sync_job_id`),
|
|
INDEX `sync_change_entity_type_change_type_idx`(`entity_type`, `change_type`),
|
|
CONSTRAINT `sync_change_sync_job_id_fkey`
|
|
FOREIGN KEY (`sync_job_id`) REFERENCES `sync_job`(`id`)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `notification` (
|
|
`id` INT NOT NULL AUTO_INCREMENT,
|
|
`title` VARCHAR(150) NOT NULL,
|
|
`content` TEXT NULL,
|
|
`type` VARCHAR(30) NOT NULL DEFAULT 'info',
|
|
`level` VARCHAR(20) NOT NULL DEFAULT 'info',
|
|
`action_url` VARCHAR(255) NULL,
|
|
`related_sync_job_id` INT NULL,
|
|
`metadata` TEXT NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
PRIMARY KEY (`id`),
|
|
INDEX `notification_related_sync_job_id_idx`(`related_sync_job_id`),
|
|
INDEX `notification_created_at_idx`(`created_at`),
|
|
CONSTRAINT `notification_related_sync_job_id_fkey`
|
|
FOREIGN KEY (`related_sync_job_id`) REFERENCES `sync_job`(`id`)
|
|
ON DELETE SET NULL
|
|
ON UPDATE CASCADE
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE `user_notification` (
|
|
`id` INT NOT NULL AUTO_INCREMENT,
|
|
`user_id` INT NOT NULL,
|
|
`notification_id` INT NOT NULL,
|
|
`is_read` BOOLEAN NOT NULL DEFAULT false,
|
|
`read_at` DATETIME(3) NULL,
|
|
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE INDEX `user_notification_user_id_notification_id_key`(`user_id`, `notification_id`),
|
|
INDEX `user_notification_user_id_is_read_created_at_idx`(`user_id`, `is_read`, `created_at`),
|
|
CONSTRAINT `user_notification_user_id_fkey`
|
|
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE,
|
|
CONSTRAINT `user_notification_notification_id_fkey`
|
|
FOREIGN KEY (`notification_id`) REFERENCES `notification`(`id`)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|