feat(admin): analytics redis cache, shared ops health, ticket queue clarity
CI / check (push) Successful in 29s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m25s
CI / deploy (push) Failing after 10s

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
SimoandCursor committed 2026-07-30 19:57:00 +02:00
1 parent 474de0717b
commit 58fae1f90f
38 files changed
+348 -245

No files matched your search

+7 -1
View File
@@ -7,6 +7,7 @@ import { StatusCard } from "@/components/admin/dashboard";
import { TicketQueueBanner } from "@/components/admin/ticket-queue-banner";
import type { Prisma } from "@/generated/prisma/client";
import { requireModPermission } from "@/lib/admin/guard";
import { fetchTicketQueueOpenCounts } from "@/lib/admin/ticket-queue-counts";
import { calcPagination, parseListParams } from "@/lib/admin-helpers";
import { formatDate } from "@/lib/format-date";
import { PERMS } from "@/lib/permissions";
@@ -82,7 +83,7 @@ export default async function ModHelpTicketsPage({
[orderField]: parsed.order,
} as Prisma.WebsiteHelpCenterTicketsOrderByWithRelationInput;
const [total, openCount, closedCount] = await Promise.all([
const [total, openCount, closedCount, queues] = await Promise.all([
prisma.websiteHelpCenterTickets.count({ where }).catch(() => 0),
prisma.websiteHelpCenterTickets
.count({ where: { open: true } })
@@ -90,6 +91,7 @@ export default async function ModHelpTicketsPage({
prisma.websiteHelpCenterTickets
.count({ where: { open: false } })
.catch(() => 0),
fetchTicketQueueOpenCounts(),
]);
const pagination = calcPagination(total, parsed.page, parsed.perPage);
@@ -165,6 +167,10 @@ export default async function ModHelpTicketsPage({
hint={t("queueHint")}
otherHref="/mod/tickets"
otherLabel={t("queueOtherCta")}
countsLine={t("queueCounts", {
here: queues.helpOpen,
other: queues.cmsOpen,
})}
/>
<div className="grid grid-cols-[repeat(auto-fit,minmax(180px,1fr))] gap-3.5">
<StatusCard label={t("statusOpen")} value={openCount} icon="🎫" />
+7 -1
View File
@@ -7,6 +7,7 @@ import { StatusCard } from "@/components/admin/dashboard";
import { TicketQueueBanner } from "@/components/admin/ticket-queue-banner";
import type { Prisma } from "@/generated/prisma/client";
import { requireModPermission } from "@/lib/admin/guard";
import { fetchTicketQueueOpenCounts } from "@/lib/admin/ticket-queue-counts";
import { calcPagination, parseListParams } from "@/lib/admin-helpers";
import { formatDate } from "@/lib/format-date";
import { PERMS } from "@/lib/permissions";
@@ -71,7 +72,7 @@ export default async function ModTicketsPage({
[orderField]: parsed.order,
} as Prisma.WebsiteTicketOrderByWithRelationInput;
const [total, openCount, inProgressCount, waitingCount, closedCount] =
const [total, openCount, inProgressCount, waitingCount, closedCount, queues] =
await Promise.all([
prisma.websiteTicket.count({ where }).catch(() => 0),
prisma.websiteTicket.count({ where: { status: "open" } }).catch(() => 0),
@@ -84,6 +85,7 @@ export default async function ModTicketsPage({
prisma.websiteTicket
.count({ where: { status: "closed" } })
.catch(() => 0),
fetchTicketQueueOpenCounts(),
]);
const pagination = calcPagination(total, parsed.page, parsed.perPage);
@@ -121,6 +123,10 @@ export default async function ModTicketsPage({
hint={t("queueHint")}
otherHref="/mod/help-tickets"
otherLabel={t("queueOtherCta")}
countsLine={t("queueCounts", {
here: queues.cmsOpen,
other: queues.helpOpen,
})}
/>
<div className="grid grid-cols-[repeat(auto-fit,minmax(180px,1fr))] gap-3.5">
<StatusCard label={t("statusOpen")} value={openCount} icon="🎫" />