schema.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from fastapi import Query
  2. from pydantic import BaseModel, ConfigDict, Field
  3. from app.common.enums import QueueEnum
  4. from app.core.validator import DateTimeStr
  5. class OnlineOutSchema(BaseModel):
  6. """
  7. 在线用户对应pydantic模型
  8. """
  9. model_config = ConfigDict(from_attributes=True)
  10. name: str = Field(..., description="用户名称")
  11. session_id: str = Field(..., description="会话编号")
  12. user_id: int = Field(..., description="用户ID")
  13. user_name: str = Field(..., description="用户名")
  14. ipaddr: str | None = Field(default=None, description="登陆IP地址")
  15. login_location: str | None = Field(default=None, description="登录所属地")
  16. os: str | None = Field(default=None, description="操作系统")
  17. browser: str | None = Field(default=None, description="浏览器")
  18. login_time: DateTimeStr | None = Field(default=None, description="登录时间")
  19. login_type: str | None = Field(default=None, description="登录类型 PC端 | 移动端")
  20. class OnlineQueryParam:
  21. """在线用户查询参数"""
  22. def __init__(
  23. self,
  24. name: str | None = Query(None, description="登录名称"),
  25. ipaddr: str | None = Query(None, description="登陆IP地址"),
  26. login_location: str | None = Query(None, description="登录所属地"),
  27. ) -> None:
  28. # 模糊查询字段
  29. self.name = (QueueEnum.like.value, f"%{name}%") if name else None
  30. self.login_location = (QueueEnum.like.value, f"%{login_location}%") if login_location else None
  31. self.ipaddr = (QueueEnum.like.value, f"%{ipaddr}%") if ipaddr else None