37 lines
1.8 KiB
Python
37 lines
1.8 KiB
Python
"""系统使用统计 - 登录事件模型。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import BigInteger, DateTime, String
|
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from fastapi_common.fastapi_common_web.models import BaseModel
|
|
|
|
|
|
class UsageLoginEvent(BaseModel):
|
|
"""登录事件明细表。"""
|
|
|
|
__tablename__ = "usage_login_events"
|
|
|
|
Id: Mapped[int] = mapped_column("id", BigInteger, primary_key=True, autoincrement=True)
|
|
userId: Mapped[int | None] = mapped_column("user_id", BigInteger)
|
|
sub: Mapped[str | None] = mapped_column(String(128))
|
|
usernameSnapshot: Mapped[str | None] = mapped_column("username_snapshot", String(128))
|
|
nickNameSnapshot: Mapped[str | None] = mapped_column("nick_name_snapshot", String(128))
|
|
departmentNameSnapshot: Mapped[str | None] = mapped_column("department_name_snapshot", String(255))
|
|
ouIdSnapshot: Mapped[str | None] = mapped_column("ou_id_snapshot", String(128))
|
|
ouNameSnapshot: Mapped[str | None] = mapped_column("ou_name_snapshot", String(255))
|
|
areaSnapshot: Mapped[str | None] = mapped_column("area_snapshot", String(64))
|
|
loginTime: Mapped[datetime] = mapped_column("login_time", DateTime(timezone=True))
|
|
loginResult: Mapped[str] = mapped_column("login_result", String(16))
|
|
loginType: Mapped[str] = mapped_column("login_type", String(32))
|
|
ipAddress: Mapped[str | None] = mapped_column("ip_address", String(64))
|
|
userAgent: Mapped[str | None] = mapped_column("user_agent", String(1024))
|
|
clientType: Mapped[str | None] = mapped_column("client_type", String(32))
|
|
tokenJti: Mapped[str | None] = mapped_column("token_jti", String(128))
|
|
failureReason: Mapped[str | None] = mapped_column("failure_reason", String(255))
|
|
extra: Mapped[dict | None] = mapped_column(JSONB)
|