Refine inbox ordering and alert-focused badges

This commit is contained in:
Dotta
2026-03-06 09:42:47 -06:00
parent e6339e911d
commit c23ddbad3f
2 changed files with 57 additions and 63 deletions

View File

@@ -5,15 +5,15 @@ import { joinRequests } from "@paperclipai/db";
import { sidebarBadgeService } from "../services/sidebar-badges.js";
import { issueService } from "../services/issues.js";
import { accessService } from "../services/access.js";
import { dashboardService } from "../services/dashboard.js";
import { assertCompanyAccess } from "./authz.js";
const INBOX_ISSUE_STATUSES = ["backlog", "todo", "in_progress", "in_review", "blocked"] as const;
export function sidebarBadgeRoutes(db: Db) {
const router = Router();
const svc = sidebarBadgeService(db);
const issueSvc = issueService(db);
const access = accessService(db);
const dashboard = dashboardService(db);
router.get("/companies/:companyId/sidebar-badges", async (req, res) => {
const companyId = req.params.companyId as string;
@@ -36,19 +36,16 @@ export function sidebarBadgeRoutes(db: Db) {
.then((rows) => Number(rows[0]?.count ?? 0))
: 0;
const unreadTouchedIssueCount =
req.actor.type === "board" && req.actor.userId
? await issueSvc.countUnreadTouchedByUser(
companyId,
req.actor.userId,
INBOX_ISSUE_STATUSES.join(","),
)
: 0;
const badges = await svc.get(companyId, {
joinRequests: joinRequestCount,
unreadTouchedIssues: unreadTouchedIssueCount,
});
const summary = await dashboard.summary(companyId);
const staleIssueCount = await issueSvc.staleCount(companyId, 24 * 60);
const alertsCount =
(summary.agents.error > 0 ? 1 : 0) +
(summary.costs.monthBudgetCents > 0 && summary.costs.monthUtilizationPercent >= 80 ? 1 : 0);
badges.inbox = badges.failedRuns + alertsCount + staleIssueCount;
res.json(badges);
});