Updated dashbpard and added sonner
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
10
src/lib/randomSlug.ts
Normal 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;
|
||||
}
|
||||
@@ -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(),
|
||||
})
|
||||
Reference in New Issue
Block a user