From 25a968ba53bde8fca7ba4a399d52a22a214741c5 Mon Sep 17 00:00:00 2001 From: Mohammad Mahdi Date: Fri, 31 Oct 2025 14:07:36 +0330 Subject: [PATCH] Cleanup API functions --- app/lib/api.ts | 72 ++++++++++++++++++++++++++++++++++++++++++++ app/pages/index.vue | 73 +++++++++++++++------------------------------ 2 files changed, 96 insertions(+), 49 deletions(-) create mode 100644 app/lib/api.ts diff --git a/app/lib/api.ts b/app/lib/api.ts new file mode 100644 index 0000000..dec3820 --- /dev/null +++ b/app/lib/api.ts @@ -0,0 +1,72 @@ +interface MaxedMagnetResponse { + totalTrackers: number; + name?: string; + id: string; + maxedMagnet: string; + error?: string; +} +export async function getMaxedMagnetUrl( + magnet: string +): Promise { + try { + const response = await fetch("/api/magnet", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ magnet }), + }); + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})); + return { + totalTrackers: 0, + id: "", + maxedMagnet: "", + error: errorData.message || `HTTP error! status: ${response.status}`, + } as MaxedMagnetResponse; + } + + return await response.json(); + } catch (err) { + return { + totalTrackers: 0, + id: "", + maxedMagnet: "", + error: err instanceof Error ? err.message : "An unknown error occurred", + } as MaxedMagnetResponse; + } +} + +export async function getMaxedMagnetFromTorrent( + file: File +): Promise { + try { + const form = new FormData(); + form.append("file", file); + + const response = await fetch("/api/torrent", { + method: "POST", + body: form, + }); + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})); + return { + totalTrackers: 0, + id: "", + maxedMagnet: "", + error: errorData.message || `HTTP error! status: ${response.status}`, + } as MaxedMagnetResponse; + } + + return await response.json(); + } catch (err) { + return { + totalTrackers: 0, + id: "", + maxedMagnet: "", + error: err instanceof Error ? err.message : "An unknown error occurred", + } as MaxedMagnetResponse; + } +} diff --git a/app/pages/index.vue b/app/pages/index.vue index fe88f4b..749baee 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -2,70 +2,45 @@ import MagnetCard from "~/components/MagnetCard.vue"; import { ref } from "vue"; import IndexHero from "~/components/IndexHero.vue"; +import { getMaxedMagnetFromTorrent, getMaxedMagnetUrl } from "~/lib/api"; interface MaxedMagnetResponse { totalTrackers: number; name?: string; id: string; maxedMagnet: string; + error?: string; } const maxedMagnet = ref(null); const error = ref(null); const loading = ref(false); -async function getMaxedMagnetUrl(magnet: string) { - error.value = null; // Clear any previous error - loading.value = true; // Set loading to true +async function handleMagnetSubmit(magnet: string) { + loading.value = true; + error.value = null; + maxedMagnet.value = null; - try { - const response = await fetch("/api/magnet", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ magnet }), - }); + const result = await getMaxedMagnetUrl(magnet); - if (!response.ok) { - const errorData = await response.json().catch(() => ({})); - error.value = - errorData.message || `HTTP error! status: ${response.status}`; - console.error("API error:", error.value); - return; - } + loading.value = false; - maxedMagnet.value = await response.json(); - } catch (err) { - error.value = - err instanceof Error ? err.message : "An unknown error occurred"; - console.error("Network error:", err); - } finally { - loading.value = false; // Reset loading state + if (result.error) { + error.value = result.error; + } else { + maxedMagnet.value = result; } } -async function getMaxedMagnetFromTorrent(file: File) { - error.value = null; // Clear any previous error - loading.value = true; // Set loading to true +async function handleTorrentUpload(file: File) { + loading.value = true; + const result = await getMaxedMagnetFromTorrent(file); + loading.value = false; - try { - const form = new FormData(); - form.append("file", file); - - const res = await fetch("/api/torrent", { - method: "POST", - body: form, - }); - - const data = await res.json(); - if (!res.ok) throw new Error(data.message || `HTTP ${res.status}`); - - maxedMagnet.value = data; - } catch (e: any) { - error.value = e.message || "Upload failed"; - } finally { - loading.value = false; + if (result.error) { + error.value = result.error; + } else { + maxedMagnet.value = result; } } @@ -73,12 +48,12 @@ async function getMaxedMagnetFromTorrent(file: File) {