forked from Lesin/reposync
202 lines
9.5 KiB
SQL
202 lines
9.5 KiB
SQL
-- 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; |