feat: improve audit exports and admin analytics

This commit is contained in:
2026-08-25 18:49:56 +08:00
parent 910e67bd89
commit 5740bd26e7
55 changed files with 1654 additions and 269 deletions

View File

@@ -1,6 +1,6 @@
from __future__ import annotations
from datetime import UTC, date, datetime, time, timedelta
from datetime import UTC, date, datetime, timedelta
from io import BytesIO
from fastapi import APIRouter, Depends, HTTPException, Query, status
@@ -18,6 +18,7 @@ from app.api.pagination import page_result
from app.core.database import get_db
from app.core.dependencies import get_current_admin, get_current_user
from app.core.responses import api_success
from app.core.time_utils import business_day_boundary, to_business_naive
from app.models.admin import Admin
from app.models.chat import ChatMessage, ChatSession
from app.models.feedback import MessageFeedback
@@ -136,9 +137,9 @@ def _feedback_query(read_status: str, start_date: date | None, end_date: date |
if read_status != "all":
query = query.where(MessageFeedback.is_read == (1 if read_status == "read" else 0))
if start_date is not None:
query = query.where(MessageFeedback.created_at >= datetime.combine(start_date, time.min))
query = query.where(MessageFeedback.created_at >= business_day_boundary(start_date))
if end_date is not None:
query = query.where(MessageFeedback.created_at < datetime.combine(end_date + timedelta(days=1), time.min))
query = query.where(MessageFeedback.created_at < business_day_boundary(end_date, end_exclusive=True))
return query
@@ -159,8 +160,8 @@ def _feedback_workbook(rows: list[tuple]) -> Workbook:
_excel_safe_text(session.title),
message.id,
_excel_safe_text(ensure_ai_generated_notice(message.content)),
feedback.created_at,
feedback.read_at,
to_business_naive(feedback.created_at),
to_business_naive(feedback.read_at),
])
header_fill = PatternFill("solid", fgColor="1F6F5F")
for cell in sheet[1]: