You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
1.7 KiB
Python

import dataclasses
from datetime import datetime
from fastapi import Response
@dataclasses.dataclass
class IpInfo:
"""IP 归属地解析结果。"""
ip: str
country: str | None
region: str | None
city: str | None
@dataclasses.dataclass
class UserAgentInfo:
"""User-Agent 解析结果(操作系统、浏览器、设备)。"""
user_agent: str
os: str | None
browser: str | None
device: str | None
@dataclasses.dataclass
class RequestCallNext:
"""请求链路 call_next 封装结果(状态码、消息、异常、响应)。"""
code: str
msg: str
err: Exception | None
response: Response
@dataclasses.dataclass
class AccessToken:
"""访问令牌及过期时间、会话 UUID。"""
access_token: str
access_token_expire_time: datetime
session_uuid: str
@dataclasses.dataclass
class RefreshToken:
"""刷新令牌及过期时间。"""
refresh_token: str
refresh_token_expire_time: datetime
@dataclasses.dataclass
class NewToken:
"""刷新后的一对访问/刷新令牌及会话 UUID。"""
new_access_token: str
new_access_token_expire_time: datetime
new_refresh_token: str
new_refresh_token_expire_time: datetime
session_uuid: str
@dataclasses.dataclass
class TokenPayload:
"""JWT/会话载荷中的用户与会话标识。"""
id: int
session_uuid: str
expire_time: datetime
@dataclasses.dataclass
class UploadUrl:
"""上传完成后的访问 URL。"""
url: str
@dataclasses.dataclass
class SnowflakeInfo:
"""雪花 ID 拆解后的各段信息。"""
timestamp: int
datetime: str
cluster_id: int
node_id: int
sequence: int