Added create page
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
import { z } from "zod"
|
||||
import { getSession } from "../auth/session"
|
||||
import { insertUrl } from "../db/urls"
|
||||
import { urlFormSchema } from "../schema/url"
|
||||
import { advancedUrlSchema, urlFormSchema } from "../schema/url"
|
||||
import { deleteUrl as deleteUrlDb } from "../db/urls"
|
||||
|
||||
type Response = {
|
||||
@@ -38,6 +38,33 @@ export async function addUrl(unsafeData: unknown): Promise<Response> {
|
||||
}
|
||||
}
|
||||
|
||||
export async function createAdvanceUrl(unsafeData: unknown): Promise<Response> {
|
||||
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)
|
||||
|
||||
return {
|
||||
error: false,
|
||||
message: "Short link created successfully!"
|
||||
}
|
||||
}
|
||||
|
||||
export async function deleteUrl(unsafe: unknown): Promise<Response> {
|
||||
const { session } = await getSession()
|
||||
|
||||
|
||||
@@ -2,12 +2,15 @@ import { z } from "zod";
|
||||
|
||||
export const urlFormSchema = z.object({
|
||||
url: z.string().url("Please enter a valid URL"),
|
||||
slug: z
|
||||
.string()
|
||||
.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(),
|
||||
slug: z.string().max(10, "Slug must be 10 characters or less").optional()
|
||||
})
|
||||
|
||||
export const advancedUrlSchema = z.object({
|
||||
url: z.string().url("Please enter a valid URL"),
|
||||
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().min(1, "Max visits must be at least 1").optional(),
|
||||
expDate: z.date().optional(),
|
||||
forwardQueryParams: z.boolean(),
|
||||
crawlable: z.boolean(),
|
||||
})
|
||||
Reference in New Issue
Block a user