added update shortener

pull/3/head
TZGyn 2 years ago
parent 680af668fa
commit 79912cc5a3
Signed by: TZGyn
GPG Key ID: 122EAF77AE81FD4A

@ -41,3 +41,31 @@ export const logoutUser = async (token: string) => {
.set({ expiresAt: now }) .set({ expiresAt: now })
.where(eq(sessionSchema.token, token)) .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
}

@ -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) => { const deleteShortener = async (code: string) => {
await fetch(`/api/shortener/${code}`, { await fetch(`/api/shortener/${code}`, {
method: 'delete', method: 'delete',
@ -77,7 +101,8 @@
{#if isLoading} {#if isLoading}
<Loader2 class="animate-spin" /> <Loader2 class="animate-spin" />
{/if} {/if}
Add</Button> Add
</Button>
</Dialog.Footer> </Dialog.Footer>
</Dialog.Content> </Dialog.Content>
</Dialog.Root> </Dialog.Root>
@ -120,7 +145,11 @@
</DropdownMenu.Trigger> </DropdownMenu.Trigger>
<DropdownMenu.Content> <DropdownMenu.Content>
<DropdownMenu.Group> <DropdownMenu.Group>
<DropdownMenu.Item>Edit</DropdownMenu.Item> <DropdownMenu.Item
on:click={() =>
openEditDialog(shortener.code, shortener.link)}>
Edit
</DropdownMenu.Item>
<DropdownMenu.Item <DropdownMenu.Item
on:click={() => deleteShortener(shortener.code)} on:click={() => deleteShortener(shortener.code)}
class="text-destructive data-[highlighted]:bg-destructive"> class="text-destructive data-[highlighted]:bg-destructive">
@ -137,3 +166,34 @@
{:else} {:else}
<div>No Data</div> <div>No Data</div>
{/if} {/if}
<Dialog.Root bind:open={editDialogOpen}>
<Dialog.Content class="sm:max-w-[425px]">
<Dialog.Header>
<Dialog.Title>Edit Shortener {editShortenerCode}</Dialog.Title>
<Dialog.Description>
Edit Shortner Here. Click Save To Update.
</Dialog.Description>
</Dialog.Header>
<div class="grid gap-4 py-4">
<div class="grid grid-cols-4 items-center gap-4">
<Label class="text-right">Link</Label>
<Input
id="name"
bind:value={editShortenerLink}
class="col-span-3" />
</div>
</div>
<Dialog.Footer>
<Button
on:click={() =>
editShortener(editShortenerCode, editShortenerLink)}
class="flex gap-2">
{#if isEditLoading}
<Loader2 class="animate-spin" />
{/if}
Save
</Button>
</Dialog.Footer>
</Dialog.Content>
</Dialog.Root>

@ -1,13 +1,57 @@
import { db } from '$lib/db' import { db } from '$lib/db'
import { shortener } from '$lib/db/schema' 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 { and, eq } from 'drizzle-orm'
import type { RequestHandler } from './$types' import type { RequestHandler } from './$types'
import { z } from 'zod'
export const GET: RequestHandler = async () => { export const GET: RequestHandler = async () => {
return new Response() 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) => { export const DELETE: RequestHandler = async (event) => {
const shortenerId = event.params.id const shortenerId = event.params.id
const token = event.cookies.get('token') const token = event.cookies.get('token')

Loading…
Cancel
Save