Added main dashboard
This commit is contained in:
40
src/lib/dashboard/stats.ts
Normal file
40
src/lib/dashboard/stats.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import { count, desc, eq } from "drizzle-orm"
|
||||
import { db } from "../drizzle/db"
|
||||
import { urls, visits } from "../drizzle/schema"
|
||||
|
||||
export async function getDashboardStats() {
|
||||
try {
|
||||
// Get count of shortened URLs
|
||||
const [urlsCount] = await db.select({ count: count() }).from(urls)
|
||||
|
||||
// Get count of total visits
|
||||
const [visitsCount] = await db.select({ count: count() }).from(visits)
|
||||
|
||||
// Get most visited URL
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user