667cda566f
新手引导埋点的服务端: - 表 analytics_event(五维硬性列 + props JSON 扩展字段;event/device_id/user_id/session_id/created_at 带索引) - POST /api/v1/analytics/events:客户端批量上报(不鉴权、body 读可选 user_id、补 client_ip + server_at) - admin GET /admin/api/event-logs:列表 + 按 事件/设备/用户/会话/时间 筛选(offset 分页,照 list_feedbacks) - alembic migration 建表(autogenerate 顺带检出的 ad/cps 历史索引漂移已手动剔除) app 主后端 :8770 与 admin :8771 共用同一 SQLite,admin 同库直接查、无需跨库。 配套客户端五维上报 + admin 日志页(另两仓库 PR)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: zzhyyyyy <2685922758@qq.com> Reviewed-on: #81 Co-authored-by: zhuzihao <zhuzihao@wonderable.ai> Co-committed-by: zhuzihao <zhuzihao@wonderable.ai>
34 lines
706 B
Python
34 lines
706 B
Python
"""admin 埋点日志列表响应。"""
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, ConfigDict
|
|
|
|
|
|
class AnalyticsEventOut(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: int
|
|
event: str
|
|
# Who
|
|
device_id: str
|
|
user_id: int | None
|
|
# When
|
|
session_id: str | None
|
|
client_ts: int
|
|
sent_at: int | None
|
|
created_at: datetime # 服务端接收时间(server_at)
|
|
# Where
|
|
page: str | None
|
|
client_ip: str | None
|
|
# How
|
|
oem: str | None
|
|
os: str | None
|
|
model: str | None
|
|
app_ver: str | None
|
|
network: str | None
|
|
channel: str | None
|
|
# What 专属
|
|
props: dict | None
|