From bf8b1d0d49703e82cf8162399405984bd0b3fe88 Mon Sep 17 00:00:00 2001 From: zwlucas Date: Fri, 29 May 2026 18:24:59 -0300 Subject: feat: implement static file serving and Docker support, update frontend build process Signed-off-by: zwlucas --- frontend/package-lock.json | 11 ++++ frontend/package.json | 1 + frontend/src/hooks.server.js | 5 +- frontend/src/routes/(admin)/admin/+page.server.js | 8 +-- frontend/src/routes/(admin)/admin/+page.svelte | 49 ++++++++++++++---- frontend/src/routes/+layout.svelte | 2 +- frontend/src/routes/login/+page.server.js | 7 +-- frontend/src/routes/login/+page.svelte | 61 ++++++++++++++++++++--- frontend/src/routes/status/[id]/+page.ts | 8 +-- frontend/svelte.config.js | 6 ++- 10 files changed, 128 insertions(+), 30 deletions(-) (limited to 'frontend') diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 09bad19..2198ee5 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -10,6 +10,7 @@ "hasInstallScript": true, "devDependencies": { "@sveltejs/adapter-auto": "^3.3.1", + "@sveltejs/adapter-static": "^3.0.10", "@sveltejs/kit": "^2.61.1", "@sveltejs/vite-plugin-svelte": "^4.0.4", "autoprefixer": "^10.5.0", @@ -937,6 +938,16 @@ "@sveltejs/kit": "^2.0.0" } }, + "node_modules/@sveltejs/adapter-static": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.10.tgz", + "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@sveltejs/kit": "^2.0.0" + } + }, "node_modules/@sveltejs/kit": { "version": "2.61.1", "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.61.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index 557023a..a47f219 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,6 +11,7 @@ }, "devDependencies": { "@sveltejs/adapter-auto": "^3.3.1", + "@sveltejs/adapter-static": "^3.0.10", "@sveltejs/kit": "^2.61.1", "@sveltejs/vite-plugin-svelte": "^4.0.4", "autoprefixer": "^10.5.0", diff --git a/frontend/src/hooks.server.js b/frontend/src/hooks.server.js index 39c89e9..0c53a3d 100644 --- a/frontend/src/hooks.server.js +++ b/frontend/src/hooks.server.js @@ -1,7 +1,8 @@ import { redirect } from '@sveltejs/kit'; -const API = 'http://localhost:8080/api'; +import { building } from '$app/environment'; +const API_BASE = building ? 'http://localhost:8080/api' : '/api'; const PUBLIC_PREFIXES = ['/_app', '/api']; export async function handle({ event, resolve }) { @@ -18,7 +19,7 @@ export async function handle({ event, resolve }) { if (!token) { throw redirect(302, '/login'); } - const res = await fetch(`${API}/auth/verify`, { + const res = await fetch(`${API_BASE}/auth/verify`, { headers: { Authorization: `Bearer ${token}` } }); if (!res.ok) { diff --git a/frontend/src/routes/(admin)/admin/+page.server.js b/frontend/src/routes/(admin)/admin/+page.server.js index bdf498b..f0a6f44 100644 --- a/frontend/src/routes/(admin)/admin/+page.server.js +++ b/frontend/src/routes/(admin)/admin/+page.server.js @@ -1,11 +1,13 @@ -const API = 'http://localhost:8080/api'; +import { building } from '$app/environment'; + +const API_BASE = building ? 'http://localhost:8080/api' : '/api'; export async function load({ locals }) { const token = locals.token; const headers = token ? { Authorization: `Bearer ${token}` } : {}; - const res = await fetch(`${API}/services`, { headers }); + const res = await fetch(`${API_BASE}/services`, { headers }); if (!res.ok) { return { services: [], error: 'Falha ao carregar serviços', token: token ?? '' }; } @@ -14,7 +16,7 @@ export async function load({ locals }) { const servicesWithStats = await Promise.all( services.map(async (svc) => { try { - const statsRes = await fetch(`${API}/services/${svc.id}/stats`, { headers }); + const statsRes = await fetch(`${API_BASE}/services/${svc.id}/stats`, { headers }); if (statsRes.ok) { svc.stats = await statsRes.json(); } diff --git a/frontend/src/routes/(admin)/admin/+page.svelte b/frontend/src/routes/(admin)/admin/+page.svelte index 7fa361d..9a48ba0 100644 --- a/frontend/src/routes/(admin)/admin/+page.svelte +++ b/frontend/src/routes/(admin)/admin/+page.svelte @@ -1,5 +1,7 @@ @@ -14,7 +62,7 @@
-
+
- {#if form?.error} -

{form.error}

+ {#if errorMsg} +

{errorMsg}

{/if}
diff --git a/frontend/src/routes/status/[id]/+page.ts b/frontend/src/routes/status/[id]/+page.ts index 13a72b1..6e77c6e 100644 --- a/frontend/src/routes/status/[id]/+page.ts +++ b/frontend/src/routes/status/[id]/+page.ts @@ -4,10 +4,10 @@ export const load: PageLoad = async ({ params, fetch }) => { const id = params.id; const [servicesRes, historyRes, statsRes, sslRes] = await Promise.all([ - fetch(`http://localhost:8080/api/services`).catch(() => null), - fetch(`http://localhost:8080/api/services/${id}/history`).catch(() => null), - fetch(`http://localhost:8080/api/services/${id}/stats`).catch(() => null), - fetch(`http://localhost:8080/api/services/${id}/ssl`).catch(() => null) + fetch(`/api/services`).catch(() => null), + fetch(`/api/services/${id}/history`).catch(() => null), + fetch(`/api/services/${id}/stats`).catch(() => null), + fetch(`/api/services/${id}/ssl`).catch(() => null) ]); const services = servicesRes?.ok ? await servicesRes.json() : []; diff --git a/frontend/svelte.config.js b/frontend/svelte.config.js index fcf06bd..0d48f92 100644 --- a/frontend/svelte.config.js +++ b/frontend/svelte.config.js @@ -1,11 +1,13 @@ -import adapter from '@sveltejs/adapter-auto'; +import adapterStatic from '@sveltejs/adapter-static'; import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; /** @type {import('@sveltejs/kit').Config} */ const config = { preprocess: vitePreprocess(), kit: { - adapter: adapter() + adapter: adapterStatic({ + fallback: '200.html' + }) } }; -- cgit v1.2.3