| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- from typing import Optional, List
- from pydantic import BaseModel, ConfigDict, field_validator, model_validator
- from pydantic.alias_generators import to_camel
- from app.schemas.common import DatetimeToStr
- class UserCreate(BaseModel):
- model_config = ConfigDict(populate_by_name=True, alias_generator=to_camel)
- username: str
- real_name: str
- phone: Optional[str] = None
- email: Optional[str] = None
- status: int = 1
- password: str
- role_ids: Optional[List[int]] = None
- class UserUpdate(BaseModel):
- model_config = ConfigDict(populate_by_name=True, alias_generator=to_camel)
- username: Optional[str] = None
- real_name: Optional[str] = None
- phone: Optional[str] = None
- email: Optional[str] = None
- status: Optional[int] = None
- password: Optional[str] = None
- role_ids: Optional[List[int]] = None
- class RoleBrief(BaseModel):
- model_config = ConfigDict(from_attributes=True, populate_by_name=True, alias_generator=to_camel)
- id: int
- role_name: str
- role_code: str
- class UserOut(BaseModel):
- model_config = ConfigDict(from_attributes=True, populate_by_name=True, alias_generator=to_camel)
- id: int
- username: str
- real_name: Optional[str] = None
- phone: Optional[str] = None
- email: Optional[str] = None
- status: int
- roles: str = ""
- role_list: List[RoleBrief] = []
- create_time: DatetimeToStr
- @model_validator(mode="before")
- @classmethod
- def extract_roles(cls, values):
- if isinstance(values, dict):
- return values
- raw_roles = getattr(values, "roles", None)
- role_list_data = []
- names = []
- if raw_roles is not None and hasattr(raw_roles, "__iter__"):
- for r in raw_roles:
- role_list_data.append({"id": r.id, "role_name": r.role_name, "role_code": r.role_code})
- names.append(r.role_name)
- data = {
- "id": values.id,
- "username": values.username,
- "real_name": values.real_name,
- "phone": values.phone,
- "email": values.email,
- "status": values.status,
- "roles": ",".join(names) if names else "",
- "role_list": role_list_data,
- "create_time": values.create_time,
- }
- return data
- class UserLogin(BaseModel):
- username: str
- password: str
- class UserBriefOut(BaseModel):
- model_config = ConfigDict(from_attributes=True, populate_by_name=True, alias_generator=to_camel)
- id: int
- username: str
- real_name: Optional[str] = None
- roles: str = ""
- @model_validator(mode="before")
- @classmethod
- def extract_roles(cls, values):
- if isinstance(values, dict):
- return values
- raw_roles = getattr(values, "roles", None)
- names = []
- if raw_roles is not None and hasattr(raw_roles, "__iter__"):
- names = [r.role_name for r in raw_roles]
- return {
- "id": values.id,
- "username": values.username,
- "real_name": values.real_name,
- "roles": "、".join(names) if names else "",
- }
- class UserListOut(UserOut):
- pass
- class UserStatsSummaryOut(BaseModel):
- model_config = ConfigDict(populate_by_name=True, alias_generator=to_camel)
- total_count: int
- enabled_count: int
- disabled_count: int
- admin_count: int
|