From 492db8fcf8844612da499a2c1839667b5df21097 Mon Sep 17 00:00:00 2001 From: Flavio Fois Date: Sat, 14 Feb 2026 23:01:08 +0100 Subject: [PATCH] feat: initialize dashboard with bug reporting functionality - Add HTML structure for the dashboard application. - Create database schema for bug reports and associated files. - Implement database connection using Drizzle ORM with MySQL. - Add utility functions for class names, byte formatting, and date formatting. - Create error handling page for the application. - Implement layout and main page structure with navigation and report listing. - Add server-side logic for loading reports with pagination and filtering. - Create report detail page with metadata, description, and file attachments. - Implement API endpoints for downloading reports and files, refreshing report counts, and managing report statuses. - Set up SvelteKit configuration and TypeScript support. - Configure Vite for SvelteKit and Tailwind CSS integration. - Update Docker Compose configuration for the dashboard service. - Create systemd service for managing the dashboard server. --- server/.env.example | 1 + server/.gitignore | 7 +++++++ {dashboard => server/dashboard}/.env.example | 0 {dashboard => server/dashboard}/.gitignore | 0 {dashboard => server/dashboard}/Dockerfile | 0 .../dashboard}/drizzle.config.ts | 0 {dashboard => server/dashboard}/package.json | 0 {dashboard => server/dashboard}/src/app.css | 0 {dashboard => server/dashboard}/src/app.html | 0 .../dashboard}/src/lib/schema.ts | 0 .../dashboard}/src/lib/server/db.ts | 0 {dashboard => server/dashboard}/src/lib/utils.ts | 0 .../dashboard}/src/routes/+error.svelte | 0 .../dashboard}/src/routes/+layout.server.ts | 0 .../dashboard}/src/routes/+layout.svelte | 0 .../dashboard}/src/routes/+page.server.ts | 0 .../dashboard}/src/routes/+page.svelte | 0 .../routes/api/reports/[id]/download/+server.ts | 0 .../api/reports/[id]/files/[fileId]/+server.ts | 0 .../src/routes/api/reports/refresh/+server.ts | 0 .../src/routes/reports/[id]/+page.server.ts | 0 .../src/routes/reports/[id]/+page.svelte | 0 .../src/routes/reports/[id]/+server.ts | 0 {dashboard => server/dashboard}/svelte.config.js | 0 {dashboard => server/dashboard}/tsconfig.json | 0 {dashboard => server/dashboard}/vite.config.ts | 0 server/docker-compose.yml | 2 +- server/emly-server.service | 16 ++++++++++++++++ 28 files changed, 25 insertions(+), 1 deletion(-) rename {dashboard => server/dashboard}/.env.example (100%) rename {dashboard => server/dashboard}/.gitignore (100%) rename {dashboard => server/dashboard}/Dockerfile (100%) rename {dashboard => server/dashboard}/drizzle.config.ts (100%) rename {dashboard => server/dashboard}/package.json (100%) rename {dashboard => server/dashboard}/src/app.css (100%) rename {dashboard => server/dashboard}/src/app.html (100%) rename {dashboard => server/dashboard}/src/lib/schema.ts (100%) rename {dashboard => server/dashboard}/src/lib/server/db.ts (100%) rename {dashboard => server/dashboard}/src/lib/utils.ts (100%) rename {dashboard => server/dashboard}/src/routes/+error.svelte (100%) rename {dashboard => server/dashboard}/src/routes/+layout.server.ts (100%) rename {dashboard => server/dashboard}/src/routes/+layout.svelte (100%) rename {dashboard => server/dashboard}/src/routes/+page.server.ts (100%) rename {dashboard => server/dashboard}/src/routes/+page.svelte (100%) rename {dashboard => server/dashboard}/src/routes/api/reports/[id]/download/+server.ts (100%) rename {dashboard => server/dashboard}/src/routes/api/reports/[id]/files/[fileId]/+server.ts (100%) rename {dashboard => server/dashboard}/src/routes/api/reports/refresh/+server.ts (100%) rename {dashboard => server/dashboard}/src/routes/reports/[id]/+page.server.ts (100%) rename {dashboard => server/dashboard}/src/routes/reports/[id]/+page.svelte (100%) rename {dashboard => server/dashboard}/src/routes/reports/[id]/+server.ts (100%) rename {dashboard => server/dashboard}/svelte.config.js (100%) rename {dashboard => server/dashboard}/tsconfig.json (100%) rename {dashboard => server/dashboard}/vite.config.ts (100%) create mode 100644 server/emly-server.service diff --git a/server/.env.example b/server/.env.example index 6b1cd43..1a819ac 100644 --- a/server/.env.example +++ b/server/.env.example @@ -12,6 +12,7 @@ ADMIN_KEY=change_me_admin_key # Server PORT=3000 +DASHBOARD_PORT=3001 # Rate Limiting RATE_LIMIT_MAX=5 diff --git a/server/.gitignore b/server/.gitignore index d21b1cb..04e7b8b 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -2,3 +2,10 @@ node_modules/ .env dist/ *.log + +# Dashboard +dashboard/node_modules/ +dashboard/.svelte-kit/ +dashboard/build/ +dashboard/.env +dashboard/bun.lock diff --git a/dashboard/.env.example b/server/dashboard/.env.example similarity index 100% rename from dashboard/.env.example rename to server/dashboard/.env.example diff --git a/dashboard/.gitignore b/server/dashboard/.gitignore similarity index 100% rename from dashboard/.gitignore rename to server/dashboard/.gitignore diff --git a/dashboard/Dockerfile b/server/dashboard/Dockerfile similarity index 100% rename from dashboard/Dockerfile rename to server/dashboard/Dockerfile diff --git a/dashboard/drizzle.config.ts b/server/dashboard/drizzle.config.ts similarity index 100% rename from dashboard/drizzle.config.ts rename to server/dashboard/drizzle.config.ts diff --git a/dashboard/package.json b/server/dashboard/package.json similarity index 100% rename from dashboard/package.json rename to server/dashboard/package.json diff --git a/dashboard/src/app.css b/server/dashboard/src/app.css similarity index 100% rename from dashboard/src/app.css rename to server/dashboard/src/app.css diff --git a/dashboard/src/app.html b/server/dashboard/src/app.html similarity index 100% rename from dashboard/src/app.html rename to server/dashboard/src/app.html diff --git a/dashboard/src/lib/schema.ts b/server/dashboard/src/lib/schema.ts similarity index 100% rename from dashboard/src/lib/schema.ts rename to server/dashboard/src/lib/schema.ts diff --git a/dashboard/src/lib/server/db.ts b/server/dashboard/src/lib/server/db.ts similarity index 100% rename from dashboard/src/lib/server/db.ts rename to server/dashboard/src/lib/server/db.ts diff --git a/dashboard/src/lib/utils.ts b/server/dashboard/src/lib/utils.ts similarity index 100% rename from dashboard/src/lib/utils.ts rename to server/dashboard/src/lib/utils.ts diff --git a/dashboard/src/routes/+error.svelte b/server/dashboard/src/routes/+error.svelte similarity index 100% rename from dashboard/src/routes/+error.svelte rename to server/dashboard/src/routes/+error.svelte diff --git a/dashboard/src/routes/+layout.server.ts b/server/dashboard/src/routes/+layout.server.ts similarity index 100% rename from dashboard/src/routes/+layout.server.ts rename to server/dashboard/src/routes/+layout.server.ts diff --git a/dashboard/src/routes/+layout.svelte b/server/dashboard/src/routes/+layout.svelte similarity index 100% rename from dashboard/src/routes/+layout.svelte rename to server/dashboard/src/routes/+layout.svelte diff --git a/dashboard/src/routes/+page.server.ts b/server/dashboard/src/routes/+page.server.ts similarity index 100% rename from dashboard/src/routes/+page.server.ts rename to server/dashboard/src/routes/+page.server.ts diff --git a/dashboard/src/routes/+page.svelte b/server/dashboard/src/routes/+page.svelte similarity index 100% rename from dashboard/src/routes/+page.svelte rename to server/dashboard/src/routes/+page.svelte diff --git a/dashboard/src/routes/api/reports/[id]/download/+server.ts b/server/dashboard/src/routes/api/reports/[id]/download/+server.ts similarity index 100% rename from dashboard/src/routes/api/reports/[id]/download/+server.ts rename to server/dashboard/src/routes/api/reports/[id]/download/+server.ts diff --git a/dashboard/src/routes/api/reports/[id]/files/[fileId]/+server.ts b/server/dashboard/src/routes/api/reports/[id]/files/[fileId]/+server.ts similarity index 100% rename from dashboard/src/routes/api/reports/[id]/files/[fileId]/+server.ts rename to server/dashboard/src/routes/api/reports/[id]/files/[fileId]/+server.ts diff --git a/dashboard/src/routes/api/reports/refresh/+server.ts b/server/dashboard/src/routes/api/reports/refresh/+server.ts similarity index 100% rename from dashboard/src/routes/api/reports/refresh/+server.ts rename to server/dashboard/src/routes/api/reports/refresh/+server.ts diff --git a/dashboard/src/routes/reports/[id]/+page.server.ts b/server/dashboard/src/routes/reports/[id]/+page.server.ts similarity index 100% rename from dashboard/src/routes/reports/[id]/+page.server.ts rename to server/dashboard/src/routes/reports/[id]/+page.server.ts diff --git a/dashboard/src/routes/reports/[id]/+page.svelte b/server/dashboard/src/routes/reports/[id]/+page.svelte similarity index 100% rename from dashboard/src/routes/reports/[id]/+page.svelte rename to server/dashboard/src/routes/reports/[id]/+page.svelte diff --git a/dashboard/src/routes/reports/[id]/+server.ts b/server/dashboard/src/routes/reports/[id]/+server.ts similarity index 100% rename from dashboard/src/routes/reports/[id]/+server.ts rename to server/dashboard/src/routes/reports/[id]/+server.ts diff --git a/dashboard/svelte.config.js b/server/dashboard/svelte.config.js similarity index 100% rename from dashboard/svelte.config.js rename to server/dashboard/svelte.config.js diff --git a/dashboard/tsconfig.json b/server/dashboard/tsconfig.json similarity index 100% rename from dashboard/tsconfig.json rename to server/dashboard/tsconfig.json diff --git a/dashboard/vite.config.ts b/server/dashboard/vite.config.ts similarity index 100% rename from dashboard/vite.config.ts rename to server/dashboard/vite.config.ts diff --git a/server/docker-compose.yml b/server/docker-compose.yml index 8514d85..6b75db6 100644 --- a/server/docker-compose.yml +++ b/server/docker-compose.yml @@ -37,7 +37,7 @@ services: condition: service_healthy dashboard: - build: ../dashboard + build: ./dashboard ports: - "${DASHBOARD_PORT:-3001}:3000" environment: diff --git a/server/emly-server.service b/server/emly-server.service new file mode 100644 index 0000000..25fd717 --- /dev/null +++ b/server/emly-server.service @@ -0,0 +1,16 @@ +[Unit] +Description=EMLy Bug Report Server (Docker Compose) +Requires=docker.service +After=docker.service + +[Service] +Type=oneshot +RemainAfterExit=yes +WorkingDirectory=/opt/emly-server +ExecStart=/usr/bin/docker compose up -d +ExecStop=/usr/bin/docker compose down +Restart=on-failure +TimeoutStartSec=120 + +[Install] +WantedBy=multi-user.target