Files
linker/src/lib/dashboard/stats.ts
2025-08-06 18:37:47 +02:00

36 lines
1.1 KiB
TypeScript

import { count, desc, eq } from "drizzle-orm"
import { db } from "../drizzle/db"
import { urls, visits } from "../drizzle/schema"
export async function getDashboardStats() {
try {
const [urlsCount] = await db.select({ count: count() }).from(urls)
const [visitsCount] = await db.select({ count: count() }).from(visits)
const mostVisitedUrl = await db
.select({
id: urls.id,
title: urls.title,
slug: urls.slug,
visitCount: count(visits.id)
})
.from(urls)
.leftJoin(visits, eq(urls.id, visits.urlId))
.groupBy(urls.id, urls.title, urls.slug)
.orderBy(desc(count(visits.id)))
.limit(1)
return {
totalUrls: urlsCount.count,
totalVisits: visitsCount.count,
mostVisitedUrl: mostVisitedUrl[0] || null
}
} catch (error) {
console.error("Failed to fetch dashboard stats:", error)
return {
totalUrls: 0,
totalVisits: 0,
mostVisitedUrl: null
}
}
}