scripts/stats.ts (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import { and, asc, isNotNull, isNull, ne, or, sql } from "drizzle-orm";
import { db, tickets } from "../src/database";
const fastestClosures = await db
.select()
.from(tickets)
.where(
and(
isNotNull(tickets.closedAt),
or(ne(tickets.closedBy, "reporter"), isNull(tickets.closedBy)),
),
)
.orderBy(asc(sql`${tickets.closedAt} - ${tickets.createdAt}`))
.limit(25);
const tableData = fastestClosures.map((ticket, index) => {
const durationMs =
// biome-ignore lint/style/noNonNullAssertion:
new Date(ticket.closedAt!).getTime() - new Date(ticket.createdAt).getTime();
return {
ticket: `#${ticket.id}`,
"closed by": ticket.closedBy,
duration: durationMs / 1000,
};
});
console.table(tableData);
|