from pydantic import BaseModel, Field from typing import Dict, List, Optional from datetime import datetime import structlog logger = structlog.get_logger(__name__) class FileEntry(BaseModel): path: str # относительный путь (mods/jei.jar) hash: str # sha256 size: int added_at: datetime modified_at: datetime class PackMeta(BaseModel): pack_name: str version: int = 1 updated_at: datetime = Field(default_factory=datetime.utcnow) files: Dict[str, FileEntry] = Field(default_factory=dict) ignored_dirs: List[str] = Field( default_factory=lambda: [ "resourcepacks", "shaderpacks", "saves", "logs", "crash-reports", "screenshots", "journeymap", "config" ] ) minecraft_version: str loader_type: str loader_version: Optional[str] = None asset_index: Optional[str] = None