81 lines
2.2 KiB
Python
81 lines
2.2 KiB
Python
from pydantic import BaseModel, Field, ConfigDict, field_serializer
|
|
from typing import Optional, List, Any
|
|
from datetime import datetime
|
|
|
|
class AccountBase(BaseModel):
|
|
username: str
|
|
password: str
|
|
status: Optional[int] = 1
|
|
today_updated: Optional[int] = 0
|
|
project_name: Optional[str] = None
|
|
update_time: Optional[str] = None
|
|
max_variation: Optional[int] = None
|
|
|
|
class AccountCreate(AccountBase):
|
|
pass
|
|
|
|
class AccountUpdate(BaseModel):
|
|
username: Optional[str] = None
|
|
password: Optional[str] = None
|
|
status: Optional[int] = None
|
|
today_updated: Optional[int] = None
|
|
project_name: Optional[str] = None
|
|
update_time: Optional[str] = None
|
|
|
|
class AccountResponse(AccountBase):
|
|
account_id: int
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
model_config = ConfigDict(
|
|
from_attributes=True
|
|
)
|
|
|
|
@classmethod
|
|
def from_orm_account(cls, account):
|
|
"""从ORM对象创建响应对象"""
|
|
return cls(
|
|
account_id=account.id,
|
|
username=account.username,
|
|
password=account.password,
|
|
status=account.status,
|
|
today_updated=account.today_updated,
|
|
project_name=account.project_name,
|
|
created_at=account.created_at,
|
|
updated_at=account.updated_at,
|
|
update_time=account.update_time,
|
|
max_variation=account.max_variation,
|
|
)
|
|
|
|
class AccountListRequest(BaseModel):
|
|
skip: Optional[int] = 0
|
|
limit: Optional[int] = 100
|
|
|
|
class AccountGetRequest(BaseModel):
|
|
account_id: Optional[int] = None
|
|
username: Optional[str] = None
|
|
project_name: Optional[str] = None
|
|
status: Optional[int] = None
|
|
today_updated: Optional[int] = None
|
|
update_time: Optional[str] = None
|
|
|
|
class AccountUpdateRequest(BaseModel):
|
|
account_id: int
|
|
account_data: AccountUpdate
|
|
|
|
class AccountDeleteRequest(BaseModel):
|
|
account_id: int
|
|
|
|
# 统一响应格式
|
|
class AccountApiResponse(BaseModel):
|
|
"""账号API统一响应格式"""
|
|
code: int = 0
|
|
message: str
|
|
data: Optional[Any] = None
|
|
|
|
class AccountListResponse(BaseModel):
|
|
"""账号列表响应格式"""
|
|
code: int = 0
|
|
message: str
|
|
total: int
|
|
data: List[AccountResponse] = [] |