File size: 2,005 Bytes
f8b03c1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | """Business logic services."""
from __future__ import annotations
from dataclasses import dataclass
from typing import Any
from .id_service import FolderTemplateIdService
@dataclass(frozen=True)
class FolderTemplateStructureRules:
id_service: FolderTemplateIdService
def validate_and_fix_structure_ids(
self, structure: dict[str, Any], template_id: int | None = None
) -> tuple[bool, dict[str, Any], list[str]]:
if not structure or not isinstance(structure, dict):
return False, structure, []
current_ids = self.id_service.collect_structure_ids(structure)
internal_duplicates = self.id_service.find_internal_duplicates(current_ids)
global_duplicates = self.id_service.find_global_duplicates(current_ids, template_id)
all_duplicates = internal_duplicates | global_duplicates
if not all_duplicates:
return False, structure, []
import copy
fixed_structure = copy.deepcopy(structure)
self.id_service.replace_duplicate_ids_in_structure(fixed_structure, all_duplicates)
fix_messages = [f"已自动修复 {len(all_duplicates)} 个重复ID: {', '.join(sorted(all_duplicates))}"]
return True, fixed_structure, fix_messages
def validate_structure_ids(
self, structure: dict[str, Any], template_id: int | None = None
) -> tuple[bool, list[str]]:
if not structure or not isinstance(structure, dict):
return True, []
current_ids = self.id_service.collect_structure_ids(structure)
internal_duplicates = self.id_service.find_internal_duplicates(current_ids)
if internal_duplicates:
return False, [f"结构内部存在重复ID: {', '.join(internal_duplicates)}"]
global_duplicates = self.id_service.find_global_duplicates(current_ids, template_id)
if global_duplicates:
return False, [f"结构ID与其他模板重复: {', '.join(global_duplicates)}"]
return True, []
|