feat(dashboard): message activity timeline + moderation donut
Backend: - GET /api/dashboard/activity?days=1..90 — daily buckets (messages, flagged, active_users) + hourly distribution last 24h - clamped days param, reuses existing indexes (idx_messages_created, ai_status_created) Frontend: - ActivityChart: area chart messages+flagged per day, 7/14/30d range - HourlyActivityChart: 24h bars with peak highlight - ModerationDonut: clean/flagged/warned/error breakdown with live summary line (server X% clean) - Dashboard layout: activity 2/3 + donut 1/3, hourly + top channels Verified: endpoint returns real data from prod DB (784/1897/8 msgs per day), tsc clean backend+frontend.
This commit is contained in:
@@ -2,6 +2,7 @@ import useSWR from "swr";
|
||||
|
||||
import { dashboardApi } from "@/lib/api";
|
||||
import type {
|
||||
DashboardActivity,
|
||||
DashboardChannelDetail,
|
||||
DashboardStats,
|
||||
DashboardUserDetail,
|
||||
@@ -13,6 +14,12 @@ export function useStats() {
|
||||
);
|
||||
}
|
||||
|
||||
export function useActivity(days = 14) {
|
||||
return useSWR<DashboardActivity>(["dashboard-activity", days], () =>
|
||||
dashboardApi.getActivity(days),
|
||||
);
|
||||
}
|
||||
|
||||
export function useUsers(search?: string) {
|
||||
return useSWR(
|
||||
["dashboard-users", search ?? ""],
|
||||
|
||||
Reference in New Issue
Block a user