From 79912cc5a36fc0c782741c798b8ae4e7e49478f1 Mon Sep 17 00:00:00 2001 From: TZGyn Date: Sun, 19 Nov 2023 12:08:45 +0800 Subject: [PATCH] added update shortener --- src/lib/server/auth.ts | 28 +++++++++++ src/routes/(app)/links/+page.svelte | 64 +++++++++++++++++++++++- src/routes/api/shortener/[id]/+server.ts | 46 ++++++++++++++++- 3 files changed, 135 insertions(+), 3 deletions(-) diff --git a/src/lib/server/auth.ts b/src/lib/server/auth.ts index b11c431..f899ed6 100644 --- a/src/lib/server/auth.ts +++ b/src/lib/server/auth.ts @@ -41,3 +41,31 @@ export const logoutUser = async (token: string) => { .set({ expiresAt: now }) .where(eq(sessionSchema.token, token)) } + +export const getUserFromEvent = async (event: RequestEvent) => { + const token = event.cookies.get('token') + + if (!token) { + return { + success: false, + response: JSON.stringify({ + success: false, + message: 'Invalid User', + }), + } as const + } + + const user = await getUserFromSessionToken(token) + + if (!user) { + return { + success: false, + response: JSON.stringify({ + success: false, + message: 'Invalid User', + }), + } as const + } + + return { success: true, user } as const +} diff --git a/src/routes/(app)/links/+page.svelte b/src/routes/(app)/links/+page.svelte index dacd418..f3c357a 100644 --- a/src/routes/(app)/links/+page.svelte +++ b/src/routes/(app)/links/+page.svelte @@ -40,6 +40,30 @@ } } + let editDialogOpen = false + let editShortenerCode = '' + let editShortenerLink = '' + let isEditLoading = false + + const openEditDialog = (code: string, link: string) => { + editDialogOpen = true + editShortenerCode = code + editShortenerLink = link + } + + const editShortener = async (code: string, link: string) => { + isEditLoading = true + await fetch(`/api/shortener/${code}`, { + method: 'put', + body: JSON.stringify({ + link, + }), + }) + await invalidateAll() + isEditLoading = false + editDialogOpen = false + } + const deleteShortener = async (code: string) => { await fetch(`/api/shortener/${code}`, { method: 'delete', @@ -77,7 +101,8 @@ {#if isLoading} {/if} - Add + Add + @@ -120,7 +145,11 @@ - Edit + + openEditDialog(shortener.code, shortener.link)}> + Edit + deleteShortener(shortener.code)} class="text-destructive data-[highlighted]:bg-destructive"> @@ -137,3 +166,34 @@ {:else}
No Data
{/if} + + + + + Edit Shortener {editShortenerCode} + + Edit Shortner Here. Click Save To Update. + + +
+
+ + +
+
+ + + +
+
diff --git a/src/routes/api/shortener/[id]/+server.ts b/src/routes/api/shortener/[id]/+server.ts index 2622f1a..17c91a5 100644 --- a/src/routes/api/shortener/[id]/+server.ts +++ b/src/routes/api/shortener/[id]/+server.ts @@ -1,13 +1,57 @@ import { db } from '$lib/db' import { shortener } from '$lib/db/schema' -import { getUserFromSessionToken } from '$lib/server/auth' +import { + getUserFromEvent, + getUserFromSessionToken, +} from '$lib/server/auth' import { and, eq } from 'drizzle-orm' import type { RequestHandler } from './$types' +import { z } from 'zod' export const GET: RequestHandler = async () => { return new Response() } +const updateShortenerSchema = z.object({ + link: z.string().url(), +}) + +export const PUT: RequestHandler = async (event) => { + const data = await getUserFromEvent(event) + + if (!data.success) { + return new Response(data.response) + } + + const user = data.user + + const shortenerId = event.params.id + const body = await event.request.json() + + const updateShortener = updateShortenerSchema.safeParse(body) + + if (!updateShortener.success) { + return new Response( + JSON.stringify({ + success: false, + message: 'Invalid Request', + }), + ) + } + + await db + .update(shortener) + .set({ link: updateShortener.data.link }) + .where( + and( + eq(shortener.code, shortenerId), + eq(shortener.userId, user.id), + ), + ) + + return new Response(JSON.stringify({ success: true })) +} + export const DELETE: RequestHandler = async (event) => { const shortenerId = event.params.id const token = event.cookies.get('token')