Updated dashbpard and added sonner

This commit is contained in:
2025-06-26 14:09:10 +02:00
parent da0524a4fc
commit 4381d81710
14 changed files with 628 additions and 12 deletions

View File

@@ -1,7 +1,13 @@
import { eq } from "drizzle-orm";
import { eq, desc } from "drizzle-orm";
import { db } from "../drizzle/db";
import { urls } from "../drizzle/schema";
export function getAllUrls() {
return db.query.urls.findMany({
orderBy: desc(urls.createdAt)
})
}
export function insertUrl(data: typeof urls.$inferInsert) {
return db.insert(urls).values(data)
}

View File

@@ -2,6 +2,7 @@ export { account, session, user, verification } from "./auth-schema"
import { relations } from "drizzle-orm"
import { boolean, index, integer, pgTable, timestamp, uuid, varchar } from "drizzle-orm/pg-core"
import { generateRandomSlug } from "../randomSlug"
const createdAt = timestamp("created_at", { withTimezone: true }).defaultNow()
const updatedAt = timestamp("updated_at", { withTimezone: true }).defaultNow().$onUpdate(() => new Date())
@@ -9,7 +10,7 @@ const updatedAt = timestamp("updated_at", { withTimezone: true }).defaultNow().$
export const urls = pgTable("urls", {
id: uuid("id").primaryKey().notNull().defaultRandom(),
url: varchar("url").notNull(),
slug: varchar("slug").unique().notNull(),
slug: varchar("slug").unique().notNull().$defaultFn(() => generateRandomSlug()),
title: varchar("title"),
maxVisits: integer("max_visits"),
expDate: timestamp("exp_date", { withTimezone: true }),

10
src/lib/randomSlug.ts Normal file
View File

@@ -0,0 +1,10 @@
export function generateRandomSlug(): string {
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
let result = '';
for (let i = 0; i < 5; i++) {
result += characters.charAt(Math.floor(Math.random() * characters.length));
}
return result;
}

View File

@@ -4,10 +4,10 @@ export const urlFormSchema = z.object({
url: z.string().url("Please enter a valid URL"),
slug: z
.string()
.min(1, "Slug is required")
.min(1, "Slug must be at least 1 character long")
.max(50, "Slug must be 50 characters or less")
.regex(
/^[a-zA-Z0-9-_]+$/,
"Slug can only contain letters, numbers, hyphens, and underscores"
)
).optional(),
})