auth.py 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. """认证相关 Pydantic schemas(对外 camelCase)"""
  2. from typing import List, Optional
  3. from pydantic import BaseModel, ConfigDict, Field
  4. def _to_camel(name: str) -> str:
  5. parts = name.split("_")
  6. return parts[0] + "".join(p.capitalize() for p in parts[1:])
  7. class CamelModel(BaseModel):
  8. model_config = ConfigDict(
  9. alias_generator=_to_camel,
  10. populate_by_name=True,
  11. )
  12. class LoginBody(BaseModel):
  13. username: str
  14. password: str
  15. class TokenData(CamelModel):
  16. token: str
  17. token_type: str = Field(default="Bearer", alias="tokenType")
  18. class CurrentUserData(CamelModel):
  19. id: str
  20. username: str
  21. display_name: str
  22. role_code: str
  23. role_name: str
  24. class MenuNode(CamelModel):
  25. id: str
  26. parent_id: str
  27. menu_code: str
  28. menu_name: str
  29. path: Optional[str] = ""
  30. menu_type: str
  31. sort: int = 0
  32. children: List["MenuNode"] = Field(default_factory=list)
  33. class MenusData(CamelModel):
  34. tree: List[MenuNode]
  35. perm_codes: List[str] = Field(default_factory=list)