124 lines
2.6 KiB
Python
124 lines
2.6 KiB
Python
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from pydantic import BaseModel, ConfigDict, EmailStr, Field
|
|
|
|
|
|
class ResponseBase(BaseModel):
|
|
success: Optional[bool] = Field(None)
|
|
message: Optional[str] = Field(None)
|
|
|
|
|
|
class UserBase(BaseModel):
|
|
email: EmailStr = Field(..., examples=["user@example.com"])
|
|
username: str = Field(
|
|
...,
|
|
min_length=3,
|
|
max_length=64,
|
|
pattern=r"^[A-Za-z0-9_.-]+$",
|
|
examples=["user_1"],
|
|
)
|
|
full_name: Optional[str] = Field(
|
|
None,
|
|
max_length=255,
|
|
pattern=r"^[^<>]*$",
|
|
examples=["Иван Иванов"],
|
|
)
|
|
role_id: int = 3
|
|
|
|
|
|
class UserCreate(UserBase):
|
|
password: str | None = Field(default=None, examples=["pass123"])
|
|
|
|
model_config = ConfigDict(
|
|
json_schema_extra={
|
|
"example": {
|
|
"email": "user@example.com",
|
|
"username": "user_1",
|
|
"full_name": "Иван Иванов",
|
|
"role_id": 3,
|
|
"password": "pass123",
|
|
}
|
|
}
|
|
)
|
|
|
|
|
|
class UserUpdate(BaseModel):
|
|
email: Optional[EmailStr] = Field(default=None, examples=["user@example.com"])
|
|
username: Optional[str] = Field(
|
|
None,
|
|
min_length=3,
|
|
max_length=64,
|
|
pattern=r"^[A-Za-z0-9_.-]+$",
|
|
examples=["user_1"],
|
|
)
|
|
full_name: Optional[str] = Field(
|
|
None,
|
|
max_length=255,
|
|
pattern=r"^[^<>]*$",
|
|
examples=["Иван Иванов"],
|
|
)
|
|
role_id: Optional[int] = None
|
|
is_active: Optional[bool] = True
|
|
|
|
|
|
class UserInDB(UserBase):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: int
|
|
created_at: datetime
|
|
updated_at: Optional[datetime] = None
|
|
is_active: bool
|
|
|
|
|
|
class User(UserInDB):
|
|
pass
|
|
|
|
|
|
class UserResponse(ResponseBase):
|
|
result: Optional[UserInDB] = None
|
|
|
|
|
|
class UserListResponse(ResponseBase):
|
|
result: Optional[list[User]] = None
|
|
|
|
|
|
class SSPBase(BaseModel):
|
|
title: str
|
|
is_ssp: bool = True
|
|
is_active: bool = True
|
|
|
|
|
|
class SSPInDB(SSPBase):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
id: int
|
|
|
|
|
|
class SSPIDList(BaseModel):
|
|
ssp_ids: list[int]
|
|
|
|
|
|
class UserSSPLinkBase(BaseModel):
|
|
user_id: int
|
|
ssp: list[SSPInDB]
|
|
|
|
|
|
class UserSSPLinkResponse(ResponseBase):
|
|
result: Optional[UserSSPLinkBase] = None
|
|
|
|
|
|
class Token(BaseModel):
|
|
access_token: str
|
|
token_type: str = "bearer"
|
|
expires_in: Optional[int] = None
|
|
refresh_token: Optional[str] = None
|
|
|
|
|
|
class LoginRequest(BaseModel):
|
|
username: str
|
|
password: str
|
|
|
|
|
|
class RefreshRequest(BaseModel):
|
|
refresh_token: str
|