259 lines
13 KiB
SQL
259 lines
13 KiB
SQL
CREATE TABLE tenants (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
name VARCHAR(128) NOT NULL,
|
|
slug VARCHAR(64) NOT NULL,
|
|
status VARCHAR(24) NOT NULL DEFAULT 'active',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), UNIQUE KEY uk_tenants_slug (slug)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE users (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
username VARCHAR(64) NOT NULL,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
display_name VARCHAR(128) NOT NULL,
|
|
status VARCHAR(24) NOT NULL DEFAULT 'active',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), UNIQUE KEY uk_users_username (username)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE roles (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
name VARCHAR(64) NOT NULL,
|
|
code VARCHAR(64) NOT NULL,
|
|
permissions JSON NOT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), UNIQUE KEY uk_roles_tenant_code (tenant_id, code),
|
|
CONSTRAINT fk_roles_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE tenant_members (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
role_id BIGINT UNSIGNED NOT NULL,
|
|
status VARCHAR(24) NOT NULL DEFAULT 'active',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), UNIQUE KEY uk_tenant_members (tenant_id, user_id),
|
|
CONSTRAINT fk_members_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|
CONSTRAINT fk_members_user FOREIGN KEY (user_id) REFERENCES users(id),
|
|
CONSTRAINT fk_members_role FOREIGN KEY (role_id) REFERENCES roles(id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE scenarios (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
name VARCHAR(128) NOT NULL,
|
|
industry VARCHAR(64) NOT NULL,
|
|
role_name VARCHAR(64) NOT NULL,
|
|
goal TEXT NOT NULL,
|
|
trigger_text TEXT NOT NULL,
|
|
visibility VARCHAR(24) NOT NULL DEFAULT 'tenant',
|
|
status VARCHAR(24) NOT NULL DEFAULT 'draft',
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), KEY idx_scenarios_tenant_status (tenant_id, status),
|
|
CONSTRAINT fk_scenarios_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|
CONSTRAINT fk_scenarios_creator FOREIGN KEY (created_by) REFERENCES users(id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE scenario_fields (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
scenario_id BIGINT UNSIGNED NOT NULL,
|
|
field_key VARCHAR(64) NOT NULL,
|
|
field_name VARCHAR(128) NOT NULL,
|
|
field_type VARCHAR(32) NOT NULL,
|
|
required TINYINT(1) NOT NULL DEFAULT 0,
|
|
options JSON NOT NULL,
|
|
validation JSON NOT NULL,
|
|
sort_order INT NOT NULL DEFAULT 0,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), UNIQUE KEY uk_scenario_fields_key (scenario_id, field_key),
|
|
CONSTRAINT fk_fields_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|
CONSTRAINT fk_fields_scenario FOREIGN KEY (scenario_id) REFERENCES scenarios(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE sops (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
scenario_id BIGINT UNSIGNED NOT NULL,
|
|
name VARCHAR(128) NOT NULL,
|
|
description TEXT NOT NULL,
|
|
status VARCHAR(24) NOT NULL DEFAULT 'draft',
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), KEY idx_sops_scenario (tenant_id, scenario_id),
|
|
CONSTRAINT fk_sops_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|
CONSTRAINT fk_sops_scenario FOREIGN KEY (scenario_id) REFERENCES scenarios(id),
|
|
CONSTRAINT fk_sops_creator FOREIGN KEY (created_by) REFERENCES users(id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE sop_versions (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
sop_id BIGINT UNSIGNED NOT NULL,
|
|
version INT NOT NULL,
|
|
status VARCHAR(24) NOT NULL DEFAULT 'draft',
|
|
start_node_key VARCHAR(64) NOT NULL DEFAULT '',
|
|
published_at DATETIME(3) NULL,
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
|
reviewed_by BIGINT UNSIGNED NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), UNIQUE KEY uk_sop_versions (sop_id, version),
|
|
CONSTRAINT fk_versions_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|
CONSTRAINT fk_versions_sop FOREIGN KEY (sop_id) REFERENCES sops(id) ON DELETE CASCADE,
|
|
CONSTRAINT fk_versions_creator FOREIGN KEY (created_by) REFERENCES users(id),
|
|
CONSTRAINT fk_versions_reviewer FOREIGN KEY (reviewed_by) REFERENCES users(id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE sop_nodes (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
sop_version_id BIGINT UNSIGNED NOT NULL,
|
|
node_key VARCHAR(64) NOT NULL,
|
|
type VARCHAR(32) NOT NULL,
|
|
title VARCHAR(128) NOT NULL,
|
|
content TEXT NOT NULL,
|
|
config JSON NOT NULL,
|
|
position_x INT NOT NULL DEFAULT 0,
|
|
position_y INT NOT NULL DEFAULT 0,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), UNIQUE KEY uk_sop_nodes_key (sop_version_id, node_key),
|
|
CONSTRAINT fk_nodes_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|
CONSTRAINT fk_nodes_version FOREIGN KEY (sop_version_id) REFERENCES sop_versions(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE sop_edges (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
sop_version_id BIGINT UNSIGNED NOT NULL,
|
|
source_node_key VARCHAR(64) NOT NULL,
|
|
target_node_key VARCHAR(64) NOT NULL,
|
|
`condition` JSON NOT NULL,
|
|
priority INT NOT NULL DEFAULT 0,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), KEY idx_sop_edges_source (sop_version_id, source_node_key, priority),
|
|
CONSTRAINT fk_edges_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|
CONSTRAINT fk_edges_version FOREIGN KEY (sop_version_id) REFERENCES sop_versions(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE knowledge_cards (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
scenario_id BIGINT UNSIGNED NOT NULL,
|
|
title VARCHAR(128) NOT NULL,
|
|
status VARCHAR(24) NOT NULL DEFAULT 'draft',
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), KEY idx_cards_scenario (tenant_id, scenario_id),
|
|
CONSTRAINT fk_cards_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|
CONSTRAINT fk_cards_scenario FOREIGN KEY (scenario_id) REFERENCES scenarios(id),
|
|
CONSTRAINT fk_cards_creator FOREIGN KEY (created_by) REFERENCES users(id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE knowledge_card_versions (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
knowledge_card_id BIGINT UNSIGNED NOT NULL,
|
|
version INT NOT NULL,
|
|
content JSON NOT NULL,
|
|
status VARCHAR(24) NOT NULL DEFAULT 'draft',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), UNIQUE KEY uk_card_versions (knowledge_card_id, version),
|
|
CONSTRAINT fk_card_versions_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|
CONSTRAINT fk_card_versions_card FOREIGN KEY (knowledge_card_id) REFERENCES knowledge_cards(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE sop_runs (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
sop_id BIGINT UNSIGNED NOT NULL,
|
|
sop_version_id BIGINT UNSIGNED NOT NULL,
|
|
operator_id BIGINT UNSIGNED NOT NULL,
|
|
current_node_key VARCHAR(64) NOT NULL,
|
|
status VARCHAR(24) NOT NULL DEFAULT 'running',
|
|
answers JSON NOT NULL,
|
|
result VARCHAR(64) NOT NULL DEFAULT '',
|
|
started_at DATETIME(3) NOT NULL,
|
|
completed_at DATETIME(3) NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), KEY idx_runs_tenant_status (tenant_id, status),
|
|
CONSTRAINT fk_runs_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|
CONSTRAINT fk_runs_sop FOREIGN KEY (sop_id) REFERENCES sops(id),
|
|
CONSTRAINT fk_runs_version FOREIGN KEY (sop_version_id) REFERENCES sop_versions(id),
|
|
CONSTRAINT fk_runs_operator FOREIGN KEY (operator_id) REFERENCES users(id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE sop_run_events (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
run_id BIGINT UNSIGNED NOT NULL,
|
|
node_key VARCHAR(64) NOT NULL,
|
|
action VARCHAR(64) NOT NULL,
|
|
payload JSON NOT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), KEY idx_run_events (run_id, created_at),
|
|
CONSTRAINT fk_run_events_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|
CONSTRAINT fk_run_events_run FOREIGN KEY (run_id) REFERENCES sop_runs(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE sop_feedback (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
run_id BIGINT UNSIGNED NOT NULL,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
score INT NOT NULL,
|
|
comment TEXT NOT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), UNIQUE KEY uk_feedback_run_user (run_id, user_id),
|
|
CONSTRAINT fk_feedback_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|
CONSTRAINT fk_feedback_run FOREIGN KEY (run_id) REFERENCES sop_runs(id) ON DELETE CASCADE,
|
|
CONSTRAINT fk_feedback_user FOREIGN KEY (user_id) REFERENCES users(id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE audit_logs (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
action VARCHAR(64) NOT NULL,
|
|
resource VARCHAR(64) NOT NULL,
|
|
resource_id BIGINT UNSIGNED NOT NULL,
|
|
payload JSON NOT NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), KEY idx_audit_tenant_time (tenant_id, created_at),
|
|
CONSTRAINT fk_audit_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|
CONSTRAINT fk_audit_user FOREIGN KEY (user_id) REFERENCES users(id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE refresh_tokens (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
token_hash VARCHAR(64) NOT NULL,
|
|
expires_at DATETIME(3) NOT NULL,
|
|
revoked_at DATETIME(3) NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id), UNIQUE KEY uk_refresh_token_hash (token_hash),
|
|
CONSTRAINT fk_refresh_tenant FOREIGN KEY (tenant_id) REFERENCES tenants(id),
|
|
CONSTRAINT fk_refresh_user FOREIGN KEY (user_id) REFERENCES users(id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|