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