diff --git a/src/app/(admin)/dashboard/_components/advanced-url-form-card.tsx b/src/app/(admin)/dashboard/_components/advanced-url-form-card.tsx index ae3c5d6..c4aaaa8 100644 --- a/src/app/(admin)/dashboard/_components/advanced-url-form-card.tsx +++ b/src/app/(admin)/dashboard/_components/advanced-url-form-card.tsx @@ -190,7 +190,6 @@ export function AdvancedUrlFormCard() { diff --git a/src/app/(admin)/dashboard/_components/sidebar-user-dropdown.tsx b/src/app/(admin)/dashboard/_components/sidebar-user-dropdown.tsx index b4d3e65..cbcf81c 100644 --- a/src/app/(admin)/dashboard/_components/sidebar-user-dropdown.tsx +++ b/src/app/(admin)/dashboard/_components/sidebar-user-dropdown.tsx @@ -11,7 +11,7 @@ import { } from "@/components/ui/dropdown-menu" import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar } from "@/components/ui/sidebar" import { signOut, useSession } from "@/lib/auth/auth-client" -import { LogOut, Settings, User } from "lucide-react" +import { LogOut, User } from "lucide-react" import Link from "next/link" import { useRouter } from "next/navigation" diff --git a/src/lib/actions/url.ts b/src/lib/actions/url.ts index 73c7aa3..755e370 100644 --- a/src/lib/actions/url.ts +++ b/src/lib/actions/url.ts @@ -1,10 +1,9 @@ "use server" -import { z } from "zod" import { getSession } from "../auth/session" import { insertUrl } from "../db/urls" -import { advancedUrlSchema, urlFormSchema } from "../schema/url" -import { deleteUrl as deleteUrlDb } from "../db/urls" +import { advancedUrlSchema, editUrlSchema, urlFormSchema } from "../schema/url" +import { deleteUrl as deleteUrlDb, updateUrl as updateUrlDb } from "../db/urls" import { revalidatePath } from "next/cache" import { getWebsiteTitle } from "../websiteTitle" @@ -78,7 +77,34 @@ export async function createAdvanceUrl(unsafeData: unknown): Promise { } } -export async function deleteUrl(unsafe: unknown): Promise { +export async function updateUrl(id: string, unsafeData: unknown): Promise { + const { session } = await getSession() + + if (!session) { + return { + error: true, + message: "You must be logged in to update a short link." + } + } + + const { error, data } = editUrlSchema.safeParse(unsafeData) + + if (error) { + return { + error: true, + message: "Error parsing form data." + } + } + + await updateUrlDb(id, data) + + return { + error: false, + message: "Short link updated successfully!" + } +} + +export async function deleteUrl(id: string): Promise { const { session } = await getSession() if (!session) { @@ -88,15 +114,6 @@ export async function deleteUrl(unsafe: unknown): Promise { } } - const { error, data: id } = z.string().safeParse(unsafe) - - if (error) { - return { - error: true, - message: "Error parsing form data." - } - } - await deleteUrlDb(id) return { diff --git a/src/lib/schema/url.ts b/src/lib/schema/url.ts index d379d00..0cae166 100644 --- a/src/lib/schema/url.ts +++ b/src/lib/schema/url.ts @@ -13,4 +13,14 @@ export const advancedUrlSchema = z.object({ expDate: z.date().optional(), forwardQueryParams: z.boolean(), crawlable: z.boolean(), +}) + +export const editUrlSchema = z.object({ + url: z.string().url("Please enter a valid URL").optional(), + slug: z.string().max(10, "Slug must be 10 characters or less").optional(), + title: z.string().max(100, "Title must be 100 characters or less").optional(), + maxVisits: z.number().int().optional(), + expDate: z.date().optional(), + forwardQueryParams: z.boolean().optional(), + crawlable: z.boolean().optional(), }) \ No newline at end of file