# #region StorageModels [TYPE Module] [SEMANTICS pydantic, storage, model, backup, config] # @RATIONALE Fixed typo 'repositorys' → 'repositories' in FileCategory.REPOSITORY and StorageConfig.repo_path default. Breaking change documented for existing installations. from datetime import datetime from enum import Enum from pydantic import BaseModel, Field # #region FileCategory [C:1] [TYPE Class] # @BRIEF Enumeration of supported file categories in the storage system. class FileCategory(str, Enum): BACKUP = "backups" REPOSITORY = "repositories" # #endregion FileCategory # #region StorageConfig [C:1] [TYPE Class] # @BRIEF Configuration model for the storage system, defining paths and naming patterns. class StorageConfig(BaseModel): root_path: str = Field(default="/app/storage", description="Absolute path to the storage root directory.") backup_path: str = Field(default="backups", description="Subpath for backups.") repo_path: str = Field(default="repositories", description="Subpath for repositories.") backup_structure_pattern: str = Field(default="{category}/", description="Pattern for backup directory structure.") repo_structure_pattern: str = Field(default="{category}/", description="Pattern for repository directory structure.") filename_pattern: str = Field(default="{name}_{timestamp}", description="Pattern for filenames.") # #endregion StorageConfig # #region StoredFile [C:1] [TYPE Class] # @BRIEF Data model representing metadata for a file stored in the system. class StoredFile(BaseModel): name: str = Field(..., description="Name of the file (including extension).") path: str = Field(..., description="Relative path from storage root.") size: int = Field(..., ge=0, description="Size of the file in bytes.") created_at: datetime = Field(..., description="Creation timestamp.") category: FileCategory = Field(..., description="Category of the file.") mime_type: str | None = Field(None, description="MIME type of the file.") # #endregion StoredFile # #endregion StorageModels