refactor: 模型继承规范统一执行 (MODEL-INHERITANCE-STANDARD)
修改内容: - 13个模型从Base改为BaseModel继承 - Project/ProjectMember/BOMHeader/BOMItem统一 - Document/DocumentVersion/User统一 - SystemConfig/ConfigAuditLog统一 - Workflow/WorkflowNode/WorkflowInstance/WorkflowHistory统一 - BOMItemSubstitute统一 新增DDL: - migrations/002_add_deleted_at.sql - 所有表新增deleted_at/lock_version/created_by/updated_by字段 - 创建deleted_at索引优化查询 验收: 200 passed (增加1个)
This commit is contained in:
@@ -8,7 +8,7 @@ from sqlalchemy.orm import relationship, backref
|
||||
from datetime import datetime
|
||||
import enum
|
||||
|
||||
from app.core.database import Base
|
||||
from app.models.base import BaseModel
|
||||
|
||||
|
||||
class BOMStatus(str, enum.Enum):
|
||||
@@ -36,7 +36,7 @@ class AIAnalysisStatus(str, enum.Enum):
|
||||
FAILED = "failed" # 失败
|
||||
|
||||
|
||||
class BOMHeader(Base):
|
||||
class BOMHeader(BaseModel):
|
||||
"""BOM头表"""
|
||||
__tablename__ = "bom_headers"
|
||||
|
||||
@@ -85,7 +85,7 @@ class BOMHeader(Base):
|
||||
return f"<BOMHeader(bom_number='{self.bom_number}', version='{self.version}')>"
|
||||
|
||||
|
||||
class BOMItem(Base):
|
||||
class BOMItem(BaseModel):
|
||||
"""BOM明细表"""
|
||||
__tablename__ = "bom_items"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ from sqlalchemy import Column, Integer, String, Boolean, DateTime, Enum, Text, I
|
||||
from datetime import datetime
|
||||
import enum
|
||||
|
||||
from app.core.database import Base
|
||||
from app.models.base import BaseModel
|
||||
|
||||
|
||||
class ConfigCategory(str, enum.Enum):
|
||||
@@ -33,7 +33,7 @@ class ConfigDataType(str, enum.Enum):
|
||||
ENUM = "enum"
|
||||
|
||||
|
||||
class SystemConfig(Base):
|
||||
class SystemConfig(BaseModel):
|
||||
"""System configuration model"""
|
||||
__tablename__ = "system_configs"
|
||||
|
||||
@@ -109,7 +109,7 @@ class SystemConfig(Base):
|
||||
self.value = str(value)
|
||||
|
||||
|
||||
class ConfigAuditLog(Base):
|
||||
class ConfigAuditLog(BaseModel):
|
||||
"""Configuration change audit log"""
|
||||
__tablename__ = "config_audit_logs"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ from sqlalchemy.orm import relationship
|
||||
from datetime import datetime
|
||||
import enum
|
||||
|
||||
from app.core.database import Base
|
||||
from app.models.base import BaseModel
|
||||
|
||||
|
||||
class DocumentStatus(str, enum.Enum):
|
||||
@@ -29,7 +29,7 @@ class DocumentType(str, enum.Enum):
|
||||
OTHER = "other" # 其他
|
||||
|
||||
|
||||
class Document(Base):
|
||||
class Document(BaseModel):
|
||||
"""文档模型"""
|
||||
__tablename__ = "documents"
|
||||
|
||||
@@ -82,7 +82,7 @@ class Document(Base):
|
||||
return f"<Document(doc_number='{self.doc_number}', name='{self.doc_name}')>"
|
||||
|
||||
|
||||
class DocumentVersion(Base):
|
||||
class DocumentVersion(BaseModel):
|
||||
"""文档版本历史"""
|
||||
__tablename__ = "document_versions"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ from sqlalchemy.orm import relationship
|
||||
from datetime import datetime
|
||||
import enum
|
||||
|
||||
from app.core.database import Base
|
||||
from app.models.base import BaseModel
|
||||
|
||||
|
||||
class ProjectStatus(str, enum.Enum):
|
||||
@@ -39,7 +39,7 @@ class ProjectType(str, enum.Enum):
|
||||
COMPLIANCE = "compliance"
|
||||
|
||||
|
||||
class Project(Base):
|
||||
class Project(BaseModel):
|
||||
"""Project model for PLM"""
|
||||
__tablename__ = "projects"
|
||||
|
||||
@@ -113,7 +113,7 @@ class Project(Base):
|
||||
return 0.0
|
||||
|
||||
|
||||
class ProjectMember(Base):
|
||||
class ProjectMember(BaseModel):
|
||||
"""Project member association"""
|
||||
__tablename__ = "project_members"
|
||||
|
||||
|
||||
@@ -7,10 +7,10 @@ from sqlalchemy import Column, Integer, String, Boolean, DateTime, Text, Foreign
|
||||
from sqlalchemy.orm import relationship
|
||||
from datetime import datetime
|
||||
|
||||
from app.core.database import Base
|
||||
from app.models.base import BaseModel
|
||||
|
||||
|
||||
class BOMItemSubstitute(Base):
|
||||
class BOMItemSubstitute(BaseModel):
|
||||
"""BOM明细替代物料表"""
|
||||
__tablename__ = "bom_item_substitutes"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ from sqlalchemy.orm import relationship
|
||||
from datetime import datetime
|
||||
import enum
|
||||
|
||||
from app.core.database import Base
|
||||
from app.models.base import BaseModel
|
||||
|
||||
|
||||
class UserRole(str, enum.Enum):
|
||||
@@ -28,7 +28,7 @@ class UserStatus(str, enum.Enum):
|
||||
PENDING = "pending"
|
||||
|
||||
|
||||
class User(Base):
|
||||
class User(BaseModel):
|
||||
"""User account model"""
|
||||
__tablename__ = "users"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ from sqlalchemy.orm import relationship
|
||||
from datetime import datetime
|
||||
import enum
|
||||
|
||||
from app.core.database import Base
|
||||
from app.models.base import BaseModel
|
||||
|
||||
|
||||
class WorkflowStatus(str, enum.Enum):
|
||||
@@ -38,7 +38,7 @@ class InstanceStatus(str, enum.Enum):
|
||||
CANCELLED = "cancelled" # 已取消
|
||||
|
||||
|
||||
class Workflow(Base):
|
||||
class Workflow(BaseModel):
|
||||
"""工作流定义"""
|
||||
__tablename__ = "workflows"
|
||||
|
||||
@@ -83,7 +83,7 @@ class Workflow(Base):
|
||||
return f"<Workflow(workflow_number='{self.workflow_number}', name='{self.workflow_name}')>"
|
||||
|
||||
|
||||
class WorkflowNode(Base):
|
||||
class WorkflowNode(BaseModel):
|
||||
"""工作流节点"""
|
||||
__tablename__ = "workflow_nodes"
|
||||
|
||||
@@ -112,7 +112,7 @@ class WorkflowNode(Base):
|
||||
)
|
||||
|
||||
|
||||
class WorkflowInstance(Base):
|
||||
class WorkflowInstance(BaseModel):
|
||||
"""工作流实例"""
|
||||
__tablename__ = "workflow_instances"
|
||||
|
||||
@@ -148,7 +148,7 @@ class WorkflowInstance(Base):
|
||||
)
|
||||
|
||||
|
||||
class WorkflowHistory(Base):
|
||||
class WorkflowHistory(BaseModel):
|
||||
"""工作流历史记录"""
|
||||
__tablename__ = "workflow_history"
|
||||
|
||||
|
||||
118
migrations/002_add_deleted_at.sql
Normal file
118
migrations/002_add_deleted_at.sql
Normal file
@@ -0,0 +1,118 @@
|
||||
-- ============================================================================
|
||||
-- PLM System - Add deleted_at for Soft Delete Support
|
||||
-- Version: 1.0.1
|
||||
-- Created: 2026-04-04
|
||||
-- Description: Add deleted_at column to all tables for BaseModel inheritance
|
||||
-- ============================================================================
|
||||
|
||||
-- 1. Users Table
|
||||
ALTER TABLE users ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP NULL;
|
||||
ALTER TABLE users ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE users ADD COLUMN IF NOT EXISTS created_by INTEGER NULL;
|
||||
ALTER TABLE users ADD COLUMN IF NOT EXISTS updated_by INTEGER NULL;
|
||||
|
||||
-- 2. Products Table (already has BaseModel fields from original)
|
||||
-- No changes needed
|
||||
|
||||
-- 3. Projects Table
|
||||
ALTER TABLE projects ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP NULL;
|
||||
ALTER TABLE projects ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE projects ADD COLUMN IF NOT EXISTS created_by INTEGER NULL;
|
||||
ALTER TABLE projects ADD COLUMN IF NOT EXISTS updated_by INTEGER NULL;
|
||||
|
||||
-- 4. Project Members Table
|
||||
ALTER TABLE project_members ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP NULL;
|
||||
ALTER TABLE project_members ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE project_members ADD COLUMN IF NOT EXISTS created_by INTEGER NULL;
|
||||
ALTER TABLE project_members ADD COLUMN IF NOT EXISTS updated_by INTEGER NULL;
|
||||
|
||||
-- 5. BOM Headers Table
|
||||
ALTER TABLE bom_headers ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP NULL;
|
||||
ALTER TABLE bom_headers ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE bom_headers ADD COLUMN IF NOT EXISTS created_by INTEGER NULL;
|
||||
ALTER TABLE bom_headers ADD COLUMN IF NOT EXISTS updated_by INTEGER NULL;
|
||||
|
||||
-- 6. BOM Items Table
|
||||
ALTER TABLE bom_items ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP NULL;
|
||||
ALTER TABLE bom_items ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE bom_items ADD COLUMN IF NOT EXISTS created_by INTEGER NULL;
|
||||
ALTER TABLE bom_items ADD COLUMN IF NOT EXISTS updated_by INTEGER NULL;
|
||||
|
||||
-- 7. BOM Item Substitutes Table
|
||||
ALTER TABLE bom_item_substitutes ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP NULL;
|
||||
ALTER TABLE bom_item_substitutes ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE bom_item_substitutes ADD COLUMN IF NOT EXISTS created_by INTEGER NULL;
|
||||
ALTER TABLE bom_item_substitutes ADD COLUMN IF NOT EXISTS updated_by INTEGER NULL;
|
||||
|
||||
-- 8. Documents Table
|
||||
ALTER TABLE documents ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP NULL;
|
||||
ALTER TABLE documents ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE documents ADD COLUMN IF NOT EXISTS created_by INTEGER NULL;
|
||||
ALTER TABLE documents ADD COLUMN IF NOT EXISTS updated_by INTEGER NULL;
|
||||
|
||||
-- 9. Document Versions Table
|
||||
ALTER TABLE document_versions ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP NULL;
|
||||
ALTER TABLE document_versions ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE document_versions ADD COLUMN IF NOT EXISTS created_by INTEGER NULL;
|
||||
ALTER TABLE document_versions ADD COLUMN IF NOT EXISTS updated_by INTEGER NULL;
|
||||
|
||||
-- 10. System Config Table
|
||||
ALTER TABLE system_config ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP NULL;
|
||||
ALTER TABLE system_config ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE system_config ADD COLUMN IF NOT EXISTS created_by INTEGER NULL;
|
||||
ALTER TABLE system_config ADD COLUMN IF NOT EXISTS updated_by INTEGER NULL;
|
||||
|
||||
-- 11. Config Audit Log Table
|
||||
ALTER TABLE config_audit_log ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP NULL;
|
||||
ALTER TABLE system_config ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE config_audit_log ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE config_audit_log ADD COLUMN IF NOT EXISTS created_by INTEGER NULL;
|
||||
ALTER TABLE config_audit_log ADD COLUMN IF NOT EXISTS updated_by INTEGER NULL;
|
||||
|
||||
-- 12. Workflows Table
|
||||
ALTER TABLE workflows ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP NULL;
|
||||
ALTER TABLE workflows ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE workflows ADD COLUMN IF NOT EXISTS created_by INTEGER NULL;
|
||||
ALTER TABLE workflows ADD COLUMN IF NOT EXISTS updated_by INTEGER NULL;
|
||||
|
||||
-- 13. Workflow Nodes Table
|
||||
ALTER TABLE workflow_nodes ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP NULL;
|
||||
ALTER TABLE workflow_nodes ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE workflow_nodes ADD COLUMN IF NOT EXISTS created_by INTEGER NULL;
|
||||
ALTER TABLE workflow_nodes ADD COLUMN IF NOT EXISTS updated_by INTEGER NULL;
|
||||
|
||||
-- 14. Workflow Instances Table
|
||||
ALTER TABLE workflow_instances ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP NULL;
|
||||
ALTER TABLE workflow_instances ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE workflow_instances ADD COLUMN IF NOT EXISTS created_by INTEGER NULL;
|
||||
ALTER TABLE workflow_instances ADD COLUMN IF NOT EXISTS updated_by INTEGER NULL;
|
||||
|
||||
-- 15. Workflow History Table
|
||||
ALTER TABLE workflow_history ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP NULL;
|
||||
ALTER TABLE workflow_history ADD COLUMN IF NOT EXISTS lock_version INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE workflow_history ADD COLUMN IF NOT EXISTS created_by INTEGER NULL;
|
||||
ALTER TABLE workflow_history ADD COLUMN IF NOT EXISTS updated_by INTEGER NULL;
|
||||
|
||||
-- ============================================================================
|
||||
-- Create indexes for deleted_at (performance optimization)
|
||||
-- ============================================================================
|
||||
CREATE INDEX IF NOT EXISTS idx_users_deleted_at ON users(deleted_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_projects_deleted_at ON projects(deleted_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_bom_headers_deleted_at ON bom_headers(deleted_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_bom_items_deleted_at ON bom_items(deleted_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_documents_deleted_at ON documents(deleted_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_workflows_deleted_at ON workflows(deleted_at);
|
||||
|
||||
-- ============================================================================
|
||||
-- Comments for documentation
|
||||
-- ============================================================================
|
||||
COMMENT ON COLUMN users.deleted_at IS '软删除时间戳,NULL表示未删除';
|
||||
COMMENT ON COLUMN projects.deleted_at IS '软删除时间戳,NULL表示未删除';
|
||||
COMMENT ON COLUMN bom_headers.deleted_at IS '软删除时间戳,NULL表示未删除';
|
||||
COMMENT ON COLUMN bom_items.deleted_at IS '软删除时间戳,NULL表示未删除';
|
||||
COMMENT ON COLUMN documents.deleted_at IS '软删除时间戳,NULL表示未删除';
|
||||
COMMENT ON COLUMN workflows.deleted_at IS '软删除时间戳,NULL表示未删除';
|
||||
|
||||
-- ============================================================================
|
||||
-- End of Migration
|
||||
-- ============================================================================
|
||||
Reference in New Issue
Block a user