"use server" import { revalidatePath } from "next/cache" import { getSession } from "../auth/session" import { insertUrl } from "../db/urls" import { deleteUrl as deleteUrlDb, updateUrl as updateUrlDb } from "../db/urls" import { advancedUrlSchema, editUrlSchema, urlFormSchema } from "../schema/url" import { getWebsiteTitle } from "../websiteTitle" type Response = { error: boolean message: string } export async function addUrl(unsafeData: unknown): Promise { const { session } = await getSession() if (!session) { return { error: true, message: "You must be logged in to create a short link." } } const { error, data } = urlFormSchema.safeParse(unsafeData) if (error) { return { error: true, message: "Error parsing form data." } } await insertUrl({ ...data, slug: data.slug.length === 0 ? undefined : data.slug, title: await getWebsiteTitle(data.url) }) revalidatePath("/admin/dashboard") return { error: false, message: "Short link created successfully!" } } export async function createAdvanceUrl(unsafeData: unknown): Promise { const { session } = await getSession() if (!session) { return { error: true, message: "You must be logged in to create a short link." } } const { error, data } = advancedUrlSchema.safeParse(unsafeData) if (error) { return { error: true, message: "Error parsing form data." } } await insertUrl({ ...data, slug: data.slug ? data.slug.trim() : undefined, title: data.title?.length === 0 ? await getWebsiteTitle(data.url) : data.title, maxVisits: data.maxVisits ? data.maxVisits : null }) return { error: false, message: "Short link created successfully!" } } 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) { return { error: true, message: "You must be logged in to create a short link." } } await deleteUrlDb(id) return { error: false, message: "Short link deleted successfully!" } }