Files
Proxmox-VPS-Panel/backend/app/schemas.py
T

98 lines
1.8 KiB
Python

from datetime import datetime
from typing import Optional
from pydantic import BaseModel, EmailStr
from .models import Role, GuestType, InstanceStatus
# ---------- Auth ----------
class UserCreate(BaseModel):
email: EmailStr
password: str
class UserLogin(BaseModel):
email: EmailStr
password: str
class UserOut(BaseModel):
id: int
email: EmailStr
role: Role
is_active: bool
created_at: datetime
class Config:
from_attributes = True
class Token(BaseModel):
access_token: str
token_type: str = "bearer"
# ---------- Templates ----------
class TemplateCreate(BaseModel):
name: str
description: str = ""
guest_type: GuestType
source_vmid: Optional[int] = None
source_template: Optional[str] = None
cores: int = 1
memory_mb: int = 1024
disk_gb: int = 10
class TemplateOut(BaseModel):
id: int
name: str
description: str
guest_type: GuestType
cores: int
memory_mb: int
disk_gb: int
is_active: bool
class Config:
from_attributes = True
# ---------- Instances ----------
class InstanceCreate(BaseModel):
ciuser: str = ""
cipassword: str = ""
name: str
template_id: int
class InstanceOut(BaseModel):
id: int
name: str
vmid: int
node: str
guest_type: GuestType
status: InstanceStatus
template_id: int
template: Optional["TemplateOut"] = None
owner_id: int
created_at: datetime
class Config:
from_attributes = True
class InstanceCreatedOut(InstanceOut):
"""Расширенный ответ с одноразовыми секретами (root-пароль и т.п.)."""
root_password: Optional[str] = None
class InstanceAction(BaseModel):
action: str # start | stop | reboot | shutdown
class InstanceIPOut(BaseModel):
ip: str