63 lines
1.1 KiB
Python
63 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from enum import Enum
|
|
from typing import List, Optional
|
|
|
|
from pydantic import BaseModel, Field, constr
|
|
|
|
|
|
class TokenType(str, Enum):
|
|
bearer = "bearer"
|
|
|
|
|
|
class AuthToken(BaseModel):
|
|
access_token: str
|
|
token_type: TokenType
|
|
expires_at: datetime
|
|
|
|
|
|
class ProfileBase(BaseModel):
|
|
name: constr(min_length=1)
|
|
folders: List[str] = Field(..., min_items=1)
|
|
description: Optional[str] = None
|
|
schedule_enabled: bool = False
|
|
|
|
|
|
class ProfileCreate(ProfileBase):
|
|
pass
|
|
|
|
|
|
class ProfileRead(ProfileBase):
|
|
id: int
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class BackupStartRequest(BaseModel):
|
|
profile_id: int
|
|
client_host: str
|
|
ssh_username: str
|
|
ssh_password: str
|
|
folders: Optional[List[str]] = None
|
|
|
|
|
|
class JobStatusResponse(BaseModel):
|
|
job_id: int
|
|
status: str
|
|
progress: int
|
|
summary: Optional[str]
|
|
last_log_lines: List[str] = []
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class BackupLog(BaseModel):
|
|
job_id: int
|
|
lines: List[str]
|
|
|
|
|
|
class HealthResponse(BaseModel):
|
|
status: str
|
|
version: str
|