dataclasses.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import dataclasses
  2. from datetime import datetime
  3. from fastapi import Response
  4. @dataclasses.dataclass
  5. class IpInfo:
  6. """IP 归属地解析结果。"""
  7. ip: str
  8. country: str | None
  9. region: str | None
  10. city: str | None
  11. @dataclasses.dataclass
  12. class UserAgentInfo:
  13. """User-Agent 解析结果(操作系统、浏览器、设备)。"""
  14. user_agent: str
  15. os: str | None
  16. browser: str | None
  17. device: str | None
  18. @dataclasses.dataclass
  19. class RequestCallNext:
  20. """请求链路 call_next 封装结果(状态码、消息、异常、响应)。"""
  21. code: str
  22. msg: str
  23. err: Exception | None
  24. response: Response
  25. @dataclasses.dataclass
  26. class AccessToken:
  27. """访问令牌及过期时间、会话 UUID。"""
  28. access_token: str
  29. access_token_expire_time: datetime
  30. session_uuid: str
  31. @dataclasses.dataclass
  32. class RefreshToken:
  33. """刷新令牌及过期时间。"""
  34. refresh_token: str
  35. refresh_token_expire_time: datetime
  36. @dataclasses.dataclass
  37. class NewToken:
  38. """刷新后的一对访问/刷新令牌及会话 UUID。"""
  39. new_access_token: str
  40. new_access_token_expire_time: datetime
  41. new_refresh_token: str
  42. new_refresh_token_expire_time: datetime
  43. session_uuid: str
  44. @dataclasses.dataclass
  45. class TokenPayload:
  46. """JWT/会话载荷中的用户与会话标识。"""
  47. id: int
  48. session_uuid: str
  49. expire_time: datetime
  50. @dataclasses.dataclass
  51. class UploadUrl:
  52. """上传完成后的访问 URL。"""
  53. url: str
  54. @dataclasses.dataclass
  55. class SnowflakeInfo:
  56. """雪花 ID 拆解后的各段信息。"""
  57. timestamp: int
  58. datetime: str
  59. cluster_id: int
  60. node_id: int
  61. sequence: int