From 160cb7a52e2f673b8c91e5a61e2f1cd5e6deebc4 Mon Sep 17 00:00:00 2001 From: host Date: Sun, 9 Aug 2026 16:27:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D1=85=D0=B5=D0=BC=D0=B0=20=D0=B4=D0=B5?= =?UTF-8?q?=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D0=B9=20=D1=83=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B8=D0=BD=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D1=81=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/schemas.py | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/backend/app/schemas.py b/backend/app/schemas.py index 7cca23a..11ba706 100644 --- a/backend/app/schemas.py +++ b/backend/app/schemas.py @@ -1,4 +1,5 @@ from datetime import datetime +from typing import Literal from pydantic import BaseModel, ConfigDict, EmailStr, Field, model_validator @@ -7,16 +8,13 @@ from .models import GuestType, InstanceStatus, UserRole class UserCreate(BaseModel): """Данные для регистрации пользователя.""" - email: EmailStr password: str = Field(min_length=12, max_length=128) class UserOut(BaseModel): """Публичное представление пользователя без пароля.""" - model_config = ConfigDict(from_attributes=True) - id: int email: EmailStr role: UserRole @@ -26,14 +24,12 @@ class UserOut(BaseModel): class TokenOut(BaseModel): """Ответ с access token.""" - access_token: str token_type: str = "bearer" class TemplateCreate(BaseModel): """Данные для создания шаблона администратором.""" - name: str = Field(min_length=1, max_length=64, pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-]*$") description: str = Field(default="", max_length=2000) guest_type: GuestType @@ -55,9 +51,7 @@ class TemplateCreate(BaseModel): class TemplateOut(BaseModel): """Публичное представление активного шаблона.""" - model_config = ConfigDict(from_attributes=True) - id: int name: str description: str @@ -69,19 +63,21 @@ class TemplateOut(BaseModel): class InstanceCreate(BaseModel): - """Запрос на синхронное создание VM или LXC из шаблона.""" - + """Запрос на создание VM или LXC.""" name: str = Field(min_length=1, max_length=63, pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-]*$") template_id: int = Field(gt=0) username: str = Field(default="paneluser", min_length=1, max_length=32, pattern=r"^[a-z_][a-z0-9_-]*$") password: str = Field(min_length=12, max_length=128) +class InstanceAction(BaseModel): + """Разрешённое действие управления гостем.""" + action: Literal["start", "stop", "shutdown", "reboot"] + + class InstanceOut(BaseModel): - """Инстанс без credentials и внутренних секретов.""" - + """Инстанс без credentials.""" model_config = ConfigDict(from_attributes=True) - id: int name: str vmid: int | None @@ -94,6 +90,5 @@ class InstanceOut(BaseModel): class InstanceCreateOut(InstanceOut): - """Ответ создания с паролем, который показывается только один раз.""" - + """Ответ создания с одноразовым паролем.""" initial_password: str