304 lines
13 KiB
Python
304 lines
13 KiB
Python
"""Initial migration
|
|
|
|
Revision ID: 001
|
|
Revises:
|
|
Create Date: 2024-01-01 00:00:00.000000
|
|
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision: str = "001"
|
|
down_revision: Union[str, None] = None
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
# sys_dept
|
|
op.create_table(
|
|
"sys_dept",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("name", sa.String(100), nullable=False),
|
|
sa.Column("parent_id", sa.Integer(), sa.ForeignKey("sys_dept.id"), nullable=True),
|
|
sa.Column("sort_order", sa.Integer(), default=0),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
)
|
|
|
|
# sys_role
|
|
op.create_table(
|
|
"sys_role",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("name", sa.String(50), unique=True, nullable=False),
|
|
sa.Column("code", sa.String(50), unique=True, nullable=False),
|
|
sa.Column("description", sa.String(200)),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
)
|
|
|
|
# sys_user
|
|
op.create_table(
|
|
"sys_user",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("username", sa.String(50), unique=True, nullable=False, index=True),
|
|
sa.Column("email", sa.String(100), unique=True, nullable=True),
|
|
sa.Column("hashed_password", sa.String(255), nullable=False),
|
|
sa.Column("real_name", sa.String(50)),
|
|
sa.Column("phone", sa.String(20)),
|
|
sa.Column("is_active", sa.Boolean(), default=True),
|
|
sa.Column("is_superuser", sa.Boolean(), default=False),
|
|
sa.Column("dept_id", sa.Integer(), sa.ForeignKey("sys_dept.id"), nullable=True),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
sa.Column("updated_at", sa.DateTime(), default=sa.func.now(), onupdate=sa.func.now()),
|
|
)
|
|
|
|
# sys_user_role
|
|
op.create_table(
|
|
"sys_user_role",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("user_id", sa.Integer(), sa.ForeignKey("sys_user.id"), nullable=False),
|
|
sa.Column("role_id", sa.Integer(), sa.ForeignKey("sys_role.id"), nullable=False),
|
|
)
|
|
|
|
# data_source
|
|
op.create_table(
|
|
"data_source",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("name", sa.String(100), nullable=False),
|
|
sa.Column("source_type", sa.String(50), nullable=False),
|
|
sa.Column("host", sa.String(200)),
|
|
sa.Column("port", sa.Integer()),
|
|
sa.Column("database_name", sa.String(100)),
|
|
sa.Column("username", sa.String(100)),
|
|
sa.Column("encrypted_password", sa.Text()),
|
|
sa.Column("extra_params", sa.Text()),
|
|
sa.Column("status", sa.String(20), default="active"),
|
|
sa.Column("dept_id", sa.Integer(), sa.ForeignKey("sys_dept.id"), nullable=True),
|
|
sa.Column("created_by", sa.Integer(), sa.ForeignKey("sys_user.id")),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
sa.Column("updated_at", sa.DateTime(), default=sa.func.now(), onupdate=sa.func.now()),
|
|
)
|
|
|
|
# meta_database
|
|
op.create_table(
|
|
"meta_database",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("source_id", sa.Integer(), sa.ForeignKey("data_source.id"), nullable=False),
|
|
sa.Column("name", sa.String(100), nullable=False),
|
|
sa.Column("charset", sa.String(50)),
|
|
sa.Column("table_count", sa.Integer(), default=0),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
)
|
|
|
|
# meta_table
|
|
op.create_table(
|
|
"meta_table",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("database_id", sa.Integer(), sa.ForeignKey("meta_database.id"), nullable=False),
|
|
sa.Column("name", sa.String(200), nullable=False),
|
|
sa.Column("comment", sa.String(500)),
|
|
sa.Column("row_count", sa.BigInteger(), default=0),
|
|
sa.Column("column_count", sa.Integer(), default=0),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
)
|
|
|
|
# meta_column
|
|
op.create_table(
|
|
"meta_column",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("table_id", sa.Integer(), sa.ForeignKey("meta_table.id"), nullable=False),
|
|
sa.Column("name", sa.String(200), nullable=False),
|
|
sa.Column("data_type", sa.String(100)),
|
|
sa.Column("length", sa.Integer()),
|
|
sa.Column("comment", sa.String(500)),
|
|
sa.Column("is_nullable", sa.Boolean(), default=True),
|
|
sa.Column("sample_data", sa.Text()),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
)
|
|
|
|
# unstructured_file
|
|
op.create_table(
|
|
"unstructured_file",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("original_name", sa.String(255), nullable=False),
|
|
sa.Column("file_type", sa.String(50)),
|
|
sa.Column("file_size", sa.BigInteger()),
|
|
sa.Column("storage_path", sa.String(500)),
|
|
sa.Column("extracted_text", sa.Text()),
|
|
sa.Column("status", sa.String(20), default="pending"),
|
|
sa.Column("created_by", sa.Integer(), sa.ForeignKey("sys_user.id")),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
)
|
|
|
|
# category
|
|
op.create_table(
|
|
"category",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("parent_id", sa.Integer(), sa.ForeignKey("category.id"), nullable=True),
|
|
sa.Column("level", sa.Integer(), default=1),
|
|
sa.Column("code", sa.String(50), unique=True, nullable=False),
|
|
sa.Column("name", sa.String(100), nullable=False),
|
|
sa.Column("description", sa.Text()),
|
|
sa.Column("sort_order", sa.Integer(), default=0),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
)
|
|
|
|
# data_level
|
|
op.create_table(
|
|
"data_level",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("code", sa.String(20), unique=True, nullable=False),
|
|
sa.Column("name", sa.String(50), nullable=False),
|
|
sa.Column("description", sa.Text()),
|
|
sa.Column("color", sa.String(20), default="#999999"),
|
|
sa.Column("control_requirements", sa.JSON()),
|
|
sa.Column("sort_order", sa.Integer(), default=0),
|
|
)
|
|
|
|
# classification_template
|
|
op.create_table(
|
|
"classification_template",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("name", sa.String(100), nullable=False),
|
|
sa.Column("industry_type", sa.String(50), default="insurance_property"),
|
|
sa.Column("version", sa.String(20), default="1.0"),
|
|
sa.Column("description", sa.Text()),
|
|
sa.Column("is_builtin", sa.Boolean(), default=False),
|
|
sa.Column("is_active", sa.Boolean(), default=True),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
)
|
|
|
|
# recognition_rule
|
|
op.create_table(
|
|
"recognition_rule",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("template_id", sa.Integer(), sa.ForeignKey("classification_template.id"), nullable=False),
|
|
sa.Column("category_id", sa.Integer(), sa.ForeignKey("category.id"), nullable=True),
|
|
sa.Column("level_id", sa.Integer(), sa.ForeignKey("data_level.id"), nullable=True),
|
|
sa.Column("rule_type", sa.String(20), nullable=False),
|
|
sa.Column("rule_name", sa.String(100)),
|
|
sa.Column("rule_content", sa.Text(), nullable=False),
|
|
sa.Column("target_field", sa.String(20), default="column_name"),
|
|
sa.Column("priority", sa.Integer(), default=100),
|
|
sa.Column("hit_count", sa.Integer(), default=0),
|
|
sa.Column("is_active", sa.Boolean(), default=True),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
)
|
|
|
|
# classification_project
|
|
op.create_table(
|
|
"classification_project",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("name", sa.String(200), nullable=False),
|
|
sa.Column("template_id", sa.Integer(), sa.ForeignKey("classification_template.id")),
|
|
sa.Column("description", sa.Text()),
|
|
sa.Column("status", sa.String(20), default="created"),
|
|
sa.Column("target_source_ids", sa.Text()),
|
|
sa.Column("target_database_ids", sa.Text()),
|
|
sa.Column("target_table_ids", sa.Text()),
|
|
sa.Column("planned_start", sa.DateTime()),
|
|
sa.Column("planned_end", sa.DateTime()),
|
|
sa.Column("created_by", sa.Integer(), sa.ForeignKey("sys_user.id"), nullable=False),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
sa.Column("updated_at", sa.DateTime(), default=sa.func.now(), onupdate=sa.func.now()),
|
|
)
|
|
|
|
# classification_task
|
|
op.create_table(
|
|
"classification_task",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("project_id", sa.Integer(), sa.ForeignKey("classification_project.id"), nullable=False),
|
|
sa.Column("name", sa.String(200)),
|
|
sa.Column("assigner_id", sa.Integer(), sa.ForeignKey("sys_user.id")),
|
|
sa.Column("assignee_id", sa.Integer(), sa.ForeignKey("sys_user.id")),
|
|
sa.Column("target_type", sa.String(20), default="table"),
|
|
sa.Column("target_ids", sa.Text()),
|
|
sa.Column("status", sa.String(20), default="pending"),
|
|
sa.Column("deadline", sa.DateTime()),
|
|
sa.Column("completed_at", sa.DateTime()),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
)
|
|
|
|
# classification_result
|
|
op.create_table(
|
|
"classification_result",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("project_id", sa.Integer(), sa.ForeignKey("classification_project.id"), nullable=False),
|
|
sa.Column("column_id", sa.Integer(), sa.ForeignKey("meta_column.id"), nullable=True),
|
|
sa.Column("file_id", sa.Integer(), sa.ForeignKey("unstructured_file.id"), nullable=True),
|
|
sa.Column("category_id", sa.Integer(), sa.ForeignKey("category.id")),
|
|
sa.Column("level_id", sa.Integer(), sa.ForeignKey("data_level.id")),
|
|
sa.Column("source", sa.String(20), default="auto"),
|
|
sa.Column("confidence", sa.Float(), default=0.0),
|
|
sa.Column("labeler_id", sa.Integer(), sa.ForeignKey("sys_user.id")),
|
|
sa.Column("reviewer_id", sa.Integer(), sa.ForeignKey("sys_user.id")),
|
|
sa.Column("status", sa.String(20), default="auto"),
|
|
sa.Column("label_time", sa.DateTime()),
|
|
sa.Column("review_time", sa.DateTime()),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
sa.Column("updated_at", sa.DateTime(), default=sa.func.now(), onupdate=sa.func.now()),
|
|
)
|
|
|
|
# classification_change
|
|
op.create_table(
|
|
"classification_change",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("result_id", sa.Integer(), sa.ForeignKey("classification_result.id"), nullable=False),
|
|
sa.Column("change_type", sa.String(20), nullable=False),
|
|
sa.Column("old_category_id", sa.Integer(), sa.ForeignKey("category.id")),
|
|
sa.Column("new_category_id", sa.Integer(), sa.ForeignKey("category.id")),
|
|
sa.Column("old_level_id", sa.Integer(), sa.ForeignKey("data_level.id")),
|
|
sa.Column("new_level_id", sa.Integer(), sa.ForeignKey("data_level.id")),
|
|
sa.Column("reason", sa.Text()),
|
|
sa.Column("applicant_id", sa.Integer(), sa.ForeignKey("sys_user.id")),
|
|
sa.Column("approver_id", sa.Integer(), sa.ForeignKey("sys_user.id")),
|
|
sa.Column("approval_status", sa.String(20), default="pending"),
|
|
sa.Column("approval_comment", sa.Text()),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
)
|
|
|
|
# sys_operation_log
|
|
op.create_table(
|
|
"sys_operation_log",
|
|
sa.Column("id", sa.Integer(), primary_key=True, index=True),
|
|
sa.Column("user_id", sa.Integer(), sa.ForeignKey("sys_user.id"), nullable=True),
|
|
sa.Column("username", sa.String(50)),
|
|
sa.Column("module", sa.String(50)),
|
|
sa.Column("action", sa.String(50)),
|
|
sa.Column("method", sa.String(10)),
|
|
sa.Column("path", sa.String(500)),
|
|
sa.Column("ip", sa.String(50)),
|
|
sa.Column("request_body", sa.Text()),
|
|
sa.Column("response_body", sa.Text()),
|
|
sa.Column("status_code", sa.Integer()),
|
|
sa.Column("duration_ms", sa.Integer()),
|
|
sa.Column("created_at", sa.DateTime(), default=sa.func.now()),
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
tables = [
|
|
"sys_operation_log",
|
|
"classification_change",
|
|
"classification_result",
|
|
"classification_task",
|
|
"classification_project",
|
|
"recognition_rule",
|
|
"classification_template",
|
|
"data_level",
|
|
"category",
|
|
"unstructured_file",
|
|
"meta_column",
|
|
"meta_table",
|
|
"meta_database",
|
|
"data_source",
|
|
"sys_user_role",
|
|
"sys_user",
|
|
"sys_role",
|
|
"sys_dept",
|
|
]
|
|
for t in tables:
|
|
op.drop_table(t)
|