reposync/sql/init.sql

202 lines
9.5 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- RepoSync 数据库初始化脚本
-- 创建时间: 2024-12-19
-- 设置字符集
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- 创建数据库(如果不存在)
CREATE DATABASE IF NOT EXISTS reposync CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE reposync;
-- ==================== Issue 同步相关表 ====================
-- Issue 信息表
CREATE TABLE IF NOT EXISTS `issue` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`issue_id` bigint unsigned NOT NULL COMMENT 'issue id',
`title` text NOT NULL COMMENT 'issue标题',
`description` longtext COMMENT 'issue描述',
`project` varchar(50) NOT NULL COMMENT '工程名称',
`type` enum('GitHub','Gitee','Gitlab','Gitcode','Gitlink') NOT NULL COMMENT '仓库类型',
`status` enum('open','closed','reopened') NOT NULL DEFAULT 'open' COMMENT 'issue状态',
`priority` enum('low','medium','high','urgent') DEFAULT 'medium' COMMENT '优先级',
`labels` text COMMENT '标签JSON格式存储',
`assignee` varchar(50) DEFAULT NULL COMMENT '负责人',
`author` varchar(50) NOT NULL COMMENT '创建者',
`address` varchar(200) NOT NULL COMMENT 'issue详情页地址',
`external_issue_id` varchar(100) DEFAULT NULL COMMENT '外部平台issue id',
`external_issue_url` varchar(200) DEFAULT NULL COMMENT '外部平台issue url',
`sync_status` enum('pending','syncing','synced','failed') NOT NULL DEFAULT 'pending' COMMENT '同步状态',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_issue_project_type` (`issue_id`, `project`, `type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Issue信息表';
-- Issue 同步任务表
CREATE TABLE IF NOT EXISTS `issue_sync_job` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`project` varchar(50) NOT NULL COMMENT '工程名称',
`source_platform` enum('GitHub','Gitee','Gitlab','Gitcode','Gitlink') NOT NULL COMMENT '源平台',
`target_platform` enum('GitHub','Gitee','Gitlab','Gitcode','Gitlink') NOT NULL COMMENT '目标平台',
`sync_type` enum('OneWay','TwoWay') NOT NULL COMMENT '同步类型',
`status` enum('active','inactive','error') NOT NULL DEFAULT 'active' COMMENT '同步状态',
`last_sync_time` DATETIME DEFAULT NULL COMMENT '最后同步时间',
`sync_interval` int DEFAULT 300 COMMENT '同步间隔(秒)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_project_platforms` (`project`, `source_platform`, `target_platform`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Issue同步任务表';
-- Issue 同步日志表
CREATE TABLE IF NOT EXISTS `issue_sync_log` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`issue_sync_job_id` bigint unsigned NOT NULL COMMENT 'issue同步任务id',
`issue_id` bigint unsigned DEFAULT NULL COMMENT 'issue id',
`log_type` varchar(20) NOT NULL COMMENT '日志类型',
`log` text NOT NULL COMMENT '日志内容',
`sync_direction` enum('source_to_target','target_to_source') NOT NULL COMMENT '同步方向',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
INDEX `idx_issue_sync_job_id` (`issue_sync_job_id`),
INDEX `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Issue同步日志表';
-- ==================== 仓库同步相关表 ====================
-- 同步仓库映射表
CREATE TABLE IF NOT EXISTS `sync_repo_mapping` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`repo_name` varchar(255) NOT NULL COMMENT '仓库名称',
`enable` tinyint(1) NOT NULL COMMENT '同步状态',
`internal_repo_address` varchar(255) NOT NULL COMMENT '内部仓库地址',
`external_repo_address` varchar(255) NOT NULL COMMENT '外部仓库地址',
`sync_granularity` enum('all', 'one') NOT NULL COMMENT '同步粒度',
`sync_direction` enum('to_outer', 'to_inter') NOT NULL COMMENT '首次同步方向',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '仓库绑定时间',
PRIMARY KEY (`id`),
UNIQUE KEY (`repo_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='同步仓库映射表';
-- 同步分支映射表
CREATE TABLE IF NOT EXISTS `sync_branch_mapping`(
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`repo_id` bigint unsigned NOT NULL COMMENT '仓库ID',
`enable` tinyint(1) NOT NULL COMMENT '同步状态',
`internal_branch_name` varchar(255) NOT NULL COMMENT '内部仓库分支名称',
`external_branch_name` varchar(255) NOT NULL COMMENT '外部仓库分支名称',
`sync_direction` enum('to_outer', 'to_inter') NOT NULL COMMENT '首次同步方向',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '分支绑定时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='同步分支映射表';
-- 仓库同步日志表
CREATE TABLE IF NOT EXISTS `repo_sync_log`(
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`branch_id` bigint unsigned COMMENT '分支id',
`repo_name` varchar(255) NOT NULL COMMENT '仓库名称',
`commit_id` varchar(255) COMMENT 'commit ID',
`log` longtext COMMENT '同步日志',
`sync_direct` enum('to_outer', 'to_inter') NOT NULL COMMENT '同步方向',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='同步日志';
-- ==================== Issue 同步配置表 ====================
-- 同步配置表
CREATE TABLE IF NOT EXISTS `sync_config` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`source_platform` VARCHAR(20),
`source_owner` VARCHAR(100),
`source_repo` VARCHAR(100),
`source_token` VARCHAR(100),
`target_platform` VARCHAR(20),
`target_owner` VARCHAR(100),
`target_repo` VARCHAR(100),
`target_token` VARCHAR(100),
`sync_type` VARCHAR(20),
`sync_direction` VARCHAR(20),
`enabled` BOOLEAN,
`auto_sync` BOOLEAN,
`sync_interval` INT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='同步配置表';
-- Issue 映射表
CREATE TABLE IF NOT EXISTS `issue_mapping` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`source_platform` VARCHAR(20),
`source_repo` VARCHAR(100),
`source_issue_id` VARCHAR(50),
`target_platform` VARCHAR(20),
`target_repo` VARCHAR(100),
`target_issue_id` VARCHAR(50),
`last_sync_time` DATETIME
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Issue映射表';
-- PR 映射表
CREATE TABLE IF NOT EXISTS `pr_mapping` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`source_platform` VARCHAR(20),
`source_repo` VARCHAR(100),
`source_pr_id` VARCHAR(50),
`target_platform` VARCHAR(20),
`target_repo` VARCHAR(100),
`target_pr_id` VARCHAR(50),
`last_sync_time` DATETIME
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PR映射表';
-- 同步日志表
CREATE TABLE IF NOT EXISTS `sync_log` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`sync_type` VARCHAR(20),
`source` VARCHAR(100),
`target` VARCHAR(100),
`status` VARCHAR(20),
`message` TEXT,
`timestamp` DATETIME
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='同步日志表';
-- PR 评论映射表
CREATE TABLE IF NOT EXISTS `pr_comment_mapping` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`source_platform` VARCHAR(20),
`source_repo` VARCHAR(100),
`source_pr_id` VARCHAR(50),
`source_comment_id` VARCHAR(50),
`target_platform` VARCHAR(20),
`target_repo` VARCHAR(100),
`target_pr_id` VARCHAR(50),
`target_comment_id` VARCHAR(50),
`comment_body` TEXT,
`commit_id` VARCHAR(100),
`path` VARCHAR(255),
`position` INT,
`last_sync_time` DATETIME,
INDEX(`source_platform`, `source_repo`, `source_pr_id`),
INDEX(`target_platform`, `target_repo`, `target_pr_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PR评论映射表';
-- ==================== 系统配置表 ====================
-- 系统配置表
CREATE TABLE IF NOT EXISTS `system_config` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`config_key` VARCHAR(100) NOT NULL UNIQUE,
`config_value` TEXT,
`description` VARCHAR(255),
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置表';
-- 插入默认配置
INSERT INTO `system_config` (`config_key`, `config_value`, `description`) VALUES
('encryption_key', 'your_default_encryption_key_here', '系统加密密钥'),
('sync_interval_default', '300', '默认同步间隔(秒)'),
('max_retry_count', '3', '最大重试次数'),
('log_retention_days', '30', '日志保留天数');
SET FOREIGN_KEY_CHECKS = 1;