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;