From ad5f98391dbc7ef529f5b64787446ed0baec1f0d Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Mon, 15 Jul 2024 20:14:27 -0400 Subject: [PATCH] generation and api --- .../src/lib/components/EditAdventure.svelte | 19 +++++--- .../src/lib/components/NewAdventure.svelte | 13 ++++++ frontend/src/routes/api/[...path]/+server.ts | 46 +++++++++++++++++++ 3 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 frontend/src/routes/api/[...path]/+server.ts diff --git a/frontend/src/lib/components/EditAdventure.svelte b/frontend/src/lib/components/EditAdventure.svelte index 8a69756..099d269 100644 --- a/frontend/src/lib/components/EditAdventure.svelte +++ b/frontend/src/lib/components/EditAdventure.svelte @@ -22,6 +22,7 @@ import Attachment from '~icons/mdi/attachment'; import PointSelectionModal from './PointSelectionModal.svelte'; import Earth from '~icons/mdi/earth'; + import Wikipedia from '~icons/mdi/wikipedia'; onMount(async () => { modal = document.getElementById('my_modal_1') as HTMLDialogElement; @@ -42,6 +43,14 @@ } } + async function generateDesc() { + let res = await fetch(`/api/generate/desc/?name=${adventureToEdit.name}`); + let data = await res.json(); + if (data.extract) { + adventureToEdit.description = data.extract; + } + } + async function handleSubmit(event: Event) { event.preventDefault(); const form = event.target as HTMLFormElement; @@ -166,13 +175,9 @@ bind:value={adventureToEdit.description} class="input input-bordered w-full max-w-xs mt-1 mb-2" /> - +
diff --git a/frontend/src/lib/components/NewAdventure.svelte b/frontend/src/lib/components/NewAdventure.svelte index f53d8cb..edf23cb 100644 --- a/frontend/src/lib/components/NewAdventure.svelte +++ b/frontend/src/lib/components/NewAdventure.svelte @@ -8,6 +8,8 @@ export let type: string = 'visited'; + import Wikipedia from '~icons/mdi/wikipedia'; + let newAdventure: Adventure = { id: NaN, type: type, @@ -49,6 +51,14 @@ } } + async function generateDesc() { + let res = await fetch(`/api/generate/desc/?name=${newAdventure.name}`); + let data = await res.json(); + if (data.extract) { + newAdventure.description = data.extract; + } + } + async function handleSubmit(event: Event) { event.preventDefault(); const form = event.target as HTMLFormElement; @@ -179,6 +189,9 @@ bind:value={newAdventure.description} class="input input-bordered w-full max-w-xs mt-1 mb-2" /> +
diff --git a/frontend/src/routes/api/[...path]/+server.ts b/frontend/src/routes/api/[...path]/+server.ts new file mode 100644 index 0000000..e6333ce --- /dev/null +++ b/frontend/src/routes/api/[...path]/+server.ts @@ -0,0 +1,46 @@ +const PUBLIC_SERVER_URL = process.env['PUBLIC_SERVER_URL']; +const endpoint = PUBLIC_SERVER_URL || 'http://localhost:8000'; +import { json } from '@sveltejs/kit'; + +/** @type {import('./$types').RequestHandler} */ +export async function GET({ url, params, request, fetch, cookies }) { + return handleRequest(url, params, request, fetch, cookies); +} + +/** @type {import('./$types').RequestHandler} */ +export async function POST({ url, params, request, fetch, cookies }) { + return handleRequest(url, params, request, fetch, cookies); +} + +// Implement other HTTP methods as needed (PUT, DELETE, etc.) + +async function handleRequest(url: any, params: any, request: any, fetch: any, cookies: any) { + const path = params.path; + const targetUrl = `${endpoint}/api/${path}${url.search}&format=json`; + + const headers = new Headers(request.headers); + + const authCookie = cookies.get('auth'); + + if (authCookie) { + headers.set('Cookie', `${authCookie}`); + } + + try { + const response = await fetch(targetUrl, { + method: request.method, + headers: headers, + body: request.method !== 'GET' && request.method !== 'HEAD' ? await request.text() : undefined + }); + + const responseData = await response.text(); + + return new Response(responseData, { + status: response.status, + headers: response.headers + }); + } catch (error) { + console.error('Error forwarding request:', error); + return json({ error: 'Internal Server Error' }, { status: 500 }); + } +}