44 lines
2.0 KiB
Python
44 lines
2.0 KiB
Python
# [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] |