# [DEF:backend.src.models.storage:Module] # @TIER: TRIVIAL # @SEMANTICS: storage, file, model, pydantic # @PURPOSE: Data models for the storage system. # @LAYER: Domain from datetime import datetime from enum import Enum from typing import Optional from pydantic import BaseModel, Field # [DEF:FileCategory:Class] # @TIER: TRIVIAL # @PURPOSE: Enumeration of supported file categories in the storage system. class FileCategory(str, Enum): BACKUP = "backups" REPOSITORY = "repositorys" # [/DEF:FileCategory:Class] # [DEF:StorageConfig:Class] # @TIER: TRIVIAL # @PURPOSE: Configuration model for the storage system, defining paths and naming patterns. class StorageConfig(BaseModel): root_path: str = Field(default="backups", description="Absolute path to the storage root directory.") backup_path: str = Field(default="backups", description="Subpath for backups.") repo_path: str = Field(default="repositorys", 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.") # [/DEF:StorageConfig:Class] # [DEF:StoredFile:Class] # @TIER: TRIVIAL # @PURPOSE: 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: Optional[str] = Field(None, description="MIME type of the file.") # [/DEF:StoredFile:Class] # [/DEF:backend.src.models.storage:Module]