|
|
@@ -1,24 +1,31 @@
|
|
|
-from pydantic import BaseModel
|
|
|
-from typing import Optional, Dict, Any
|
|
|
-from app.schemas.common import ApiResponse
|
|
|
-from app.schemas.user import VasUserOut
|
|
|
+import json
|
|
|
+from pydantic import BaseModel, field_validator
|
|
|
+from typing import Optional, Dict, Any, Literal
|
|
|
|
|
|
-
|
|
|
-# --- 4. 请求/响应 Schema (Pydantic) ---
|
|
|
-class AccountCreate(BaseModel):
|
|
|
+class AccountBase(BaseModel):
|
|
|
pool_name: str
|
|
|
username: str
|
|
|
password: Optional[str] = None
|
|
|
extra_data: Optional[Dict[str, Any]] = None
|
|
|
+ status: Optional[Literal['active','disable']] = None
|
|
|
+ lock_until: float = 0
|
|
|
+ @field_validator("extra_data", mode="before")
|
|
|
+ def normalize_json_field(cls, v):
|
|
|
+ if v is None:
|
|
|
+ return None
|
|
|
+ if isinstance(v, str):
|
|
|
+ try:
|
|
|
+ return json.loads(v)
|
|
|
+ except Exception:
|
|
|
+ return {}
|
|
|
+ return v
|
|
|
+
|
|
|
+# --- 4. 请求/响应 Schema (Pydantic) ---
|
|
|
+class AccountCreate(AccountBase):
|
|
|
+ pass
|
|
|
|
|
|
-class AccountResponse(BaseModel):
|
|
|
+class AccountResponse(AccountBase):
|
|
|
id: int
|
|
|
- pool_name: str
|
|
|
- username: str
|
|
|
- password: Optional[str] = None
|
|
|
- lock_until: float
|
|
|
- extra_data: Optional[Dict[str, Any]] = None
|
|
|
- status: str
|
|
|
model_config = {
|
|
|
"from_attributes": True
|
|
|
}
|
|
|
@@ -26,4 +33,5 @@ class AccountResponse(BaseModel):
|
|
|
class LockRequest(BaseModel):
|
|
|
pool_name: str
|
|
|
username: str
|
|
|
- duration: Optional[int] = None
|
|
|
+ duration: Optional[int] = None
|
|
|
+
|