38 lines
1021 B
TypeScript
38 lines
1021 B
TypeScript
import { eq, desc, count } from "drizzle-orm";
|
|
import { db } from "../drizzle/db";
|
|
import { urls, visits } from "../drizzle/schema";
|
|
|
|
export function getAllUrls() {
|
|
return db.query.urls.findMany({
|
|
orderBy: desc(urls.createdAt),
|
|
with: {
|
|
visits: true
|
|
}
|
|
})
|
|
}
|
|
|
|
export function getUrlBySlug(slug: string) {
|
|
return db.query.urls.findFirst({
|
|
where: eq(urls.slug, slug)
|
|
})
|
|
}
|
|
|
|
export function getVisitsBySlugById(id: string) {
|
|
return db.select({ count: count() }).from(visits).where(eq(visits.urlId, id))
|
|
}
|
|
|
|
export function insertUrl(data: typeof urls.$inferInsert) {
|
|
return db.insert(urls).values(data)
|
|
}
|
|
|
|
export function updateUrl(id: string, data: Omit<Partial<typeof urls.$inferInsert>, "id">) {
|
|
return db.update(urls).set(data).where(eq(urls.id, id))
|
|
}
|
|
|
|
export function deleteUrl(id: string) {
|
|
return db.delete(urls).where(eq(urls.id, id))
|
|
}
|
|
|
|
export function trackVisit(data: typeof visits.$inferInsert) {
|
|
return db.insert(visits).values(data)
|
|
} |