50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
from pydantic import BaseModel, Field, field_validator
|
||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||
from pydantic.types import StringConstraints
|
||
from typing_extensions import Annotated
|
||
from typing import Optional
|
||
import re
|
||
|
||
NameStr = Annotated[
|
||
str,
|
||
StringConstraints(
|
||
min_length=2,
|
||
max_length=50,
|
||
pattern=r'^[A-Za-zА-ЯЁа-яё]+$'
|
||
)
|
||
]
|
||
class UserAccess(BaseModel):
|
||
code:str = Field(...,min_length=6,max_length=6, description="Code of the guest")
|
||
|
||
class Token(BaseModel):
|
||
access_token: str
|
||
token_type: str
|
||
|
||
class UserOut(BaseModel):
|
||
name: NameStr = Field(..., description="Name of the guest")
|
||
surname: NameStr = Field(..., description="Surname of the guest")
|
||
|
||
class UserUpdate(BaseModel):
|
||
code: Optional[str] = Field(None, min_length=6, max_length=6, description="Code of the guest")
|
||
name: Optional[NameStr] = Field(None, description="Name of the guest")
|
||
middlename: Optional[NameStr] = Field(None, description="Middlename of the guest")
|
||
surname: Optional[NameStr] = Field(None, description="Surname of the guest")
|
||
text_field: Optional[str] = Field(None, max_length=500, description="what the guest wants")
|
||
activated: Optional[bool] = Field(None, description="activation of the guest")
|
||
type_of_food: Optional[str] = Field(None, description="meat or fish")
|
||
types_of_alco: Optional[str] = Field(None, description="types of alco")
|
||
|
||
class UserCreate(UserUpdate):
|
||
code: str = Field(..., min_length=6, max_length=6, description="Code of the guest")
|
||
admin:bool = Field(False, description="Admin privilegies")
|
||
class Settings(BaseSettings):
|
||
DIR:str
|
||
PORT:int
|
||
SECRET_KEY:str
|
||
ALGORITHM:str
|
||
ACCESS_TOKEN_EXPIRE_SECONDS:int
|
||
model_config = SettingsConfigDict(
|
||
env_file=".env",
|
||
env_file_encoding="utf-8"
|
||
)
|
||
settings = Settings() |