from datetime import datetime from typing import Literal from pydantic import BaseModel class BackupResponse(BaseModel): id: int router_id: int router_name: str | None = None file_path: str file_name: str backup_type: str checksum: str | None = None file_size: int | None = None created_at: datetime model_config = {'from_attributes': True} class BackupDiffLine(BaseModel): type: Literal['context', 'added', 'removed', 'modified'] left_number: int | None = None right_number: int | None = None left_text: str = '' right_text: str = '' class BackupDiffStats(BaseModel): added: int = 0 removed: int = 0 modified: int = 0 context: int = 0 class BackupDiffResponse(BaseModel): left_backup_id: int right_backup_id: int left_file_name: str | None = None right_file_name: str | None = None diff_text: str diff_html: str | None = None stats: BackupDiffStats | None = None lines: list[BackupDiffLine] = [] class BulkActionRequest(BaseModel): action: Literal['download', 'delete'] backup_ids: list[int]