57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class BackupManifest(BaseModel):
|
|
backup_id: str
|
|
created_at: datetime
|
|
app_version: str
|
|
backup_type: str = "full"
|
|
database_url_host_anonymized: str
|
|
database_name: str
|
|
storage_base_path: str
|
|
included_sections: list[str] = Field(default_factory=list)
|
|
file_count: int = 0
|
|
total_size_bytes: int = 0
|
|
checksum_sha256: str
|
|
created_by_user_id: int | None = None
|
|
created_by_username: str = ""
|
|
|
|
|
|
class BackupSummary(BaseModel):
|
|
filename: str
|
|
size_bytes: int
|
|
created_at: datetime | None = None
|
|
app_version: str = ""
|
|
backup_type: str = "full"
|
|
database_name: str = ""
|
|
storage_base_path: str = ""
|
|
file_count: int = 0
|
|
total_size_bytes: int = 0
|
|
created_by_user_id: int | None = None
|
|
created_by_username: str = ""
|
|
validation_status: str = "valid"
|
|
validation_message: str = ""
|
|
|
|
|
|
class BackupListResponse(BaseModel):
|
|
items: list[BackupSummary] = Field(default_factory=list)
|
|
total_count: int = 0
|
|
total_size_bytes: int = 0
|
|
latest_backup_at: datetime | None = None
|
|
|
|
|
|
class BackupValidationResponse(BaseModel):
|
|
filename: str
|
|
valid: bool
|
|
message: str
|
|
issues: list[str] = Field(default_factory=list)
|
|
checksum_valid: bool = False
|
|
restore_supported: bool = False
|
|
requires_cli_restore: bool = True
|
|
manifest: BackupManifest | None = None
|
|
|
|
|
|
class BackupRestoreRequest(BaseModel):
|
|
confirm_text: str
|