fix: avoid broken font and speed up backlog overview

This commit is contained in:
codex-bot 2025-10-30 14:42:09 -03:00
parent 38e4bbea7f
commit d92c817e7b
4 changed files with 44 additions and 2164 deletions

View file

@ -81,6 +81,44 @@ async function fetchScopedTickets(
return fetchTickets(ctx, tenantId);
}
async function fetchScopedTicketsByCreatedRange(
ctx: QueryCtx,
tenantId: string,
viewer: Awaited<ReturnType<typeof requireStaff>>,
startMs: number,
endMs: number,
companyId?: Id<"companies">,
) {
if (viewer.role === "MANAGER") {
if (!viewer.user.companyId) {
throw new ConvexError("Gestor não possui empresa vinculada");
}
return ctx.db
.query("tickets")
.withIndex("by_tenant_company_created", (q) =>
q.eq("tenantId", tenantId).eq("companyId", viewer.user.companyId!).gte("createdAt", startMs),
)
.filter((q) => q.lt(q.field("createdAt"), endMs))
.collect();
}
if (companyId) {
return ctx.db
.query("tickets")
.withIndex("by_tenant_company_created", (q) =>
q.eq("tenantId", tenantId).eq("companyId", companyId).gte("createdAt", startMs),
)
.filter((q) => q.lt(q.field("createdAt"), endMs))
.collect();
}
return ctx.db
.query("tickets")
.withIndex("by_tenant_created", (q) => q.eq("tenantId", tenantId).gte("createdAt", startMs))
.filter((q) => q.lt(q.field("createdAt"), endMs))
.collect();
}
async function fetchQueues(ctx: QueryCtx, tenantId: string) {
return ctx.db
.query("queues")
@ -306,16 +344,13 @@ export const backlogOverview = query({
args: { tenantId: v.string(), viewerId: v.id("users"), range: v.optional(v.string()), companyId: v.optional(v.id("companies")) },
handler: async (ctx, { tenantId, viewerId, range, companyId }) => {
const viewer = await requireStaff(ctx, viewerId, tenantId);
let tickets = await fetchScopedTickets(ctx, tenantId, viewer);
if (companyId) tickets = tickets.filter((t) => t.companyId === companyId)
// Optional range filter (createdAt) for reporting purposes
const days = range === "7d" ? 7 : range === "30d" ? 30 : 90;
const end = new Date();
end.setUTCHours(0, 0, 0, 0);
const endMs = end.getTime() + ONE_DAY_MS;
const startMs = endMs - days * ONE_DAY_MS;
const inRange = tickets.filter((t) => t.createdAt >= startMs && t.createdAt < endMs);
const inRange = await fetchScopedTicketsByCreatedRange(ctx, tenantId, viewer, startMs, endMs, companyId);
const statusCounts = inRange.reduce<Record<TicketStatusNormalized, number>>((acc, ticket) => {
const status = normalizeStatus(ticket.status);

View file

@ -181,7 +181,9 @@ export default defineSchema({
.index("by_tenant_requester", ["tenantId", "requesterId"])
.index("by_tenant_company", ["tenantId", "companyId"])
.index("by_tenant_machine", ["tenantId", "machineId"])
.index("by_tenant", ["tenantId"]),
.index("by_tenant", ["tenantId"])
.index("by_tenant_created", ["tenantId", "createdAt"])
.index("by_tenant_company_created", ["tenantId", "companyId", "createdAt"]),
ticketComments: defineTable({
ticketId: v.id("tickets"),

File diff suppressed because one or more lines are too long

View file

@ -19,13 +19,7 @@
font-display: swap;
}
@font-face {
font-family: "JetBrainsMonoVariable";
src: url("/fonts/JetBrainsMono-VariableFont_wght.ttf") format("truetype");
font-weight: 100 800;
font-style: normal;
font-display: swap;
}
/* JetBrains Mono agora depende das fontes do sistema para evitar carregar um arquivo corrompido */
@theme inline {
--color-background: var(--background);
@ -106,7 +100,7 @@
--sidebar-ring: #00d6eb;
--destructive-foreground: oklch(1 0 0);
--font-geist-sans: "InterVariable", "Inter", sans-serif;
--font-geist-mono: "JetBrainsMonoVariable", "JetBrains Mono", monospace;
--font-geist-mono: "JetBrains Mono", "Fira Code", "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
.dark {