schema.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. # -*- coding: utf-8 -*-
  2. from pydantic import BaseModel, ConfigDict, Field
  3. from fastapi import Query
  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 = ("like", f"%{name}%") if name else None
  30. self.login_location = ("like", f"%{login_location}%") if login_location else None
  31. self.ipaddr = ("like", f"%{ipaddr}%") if ipaddr else None