From 7683066cebb7e53f03305df0a09770660e162916 Mon Sep 17 00:00:00 2001 From: Pau Costa Date: Sat, 28 Mar 2026 15:15:28 +0100 Subject: [PATCH] Add floorplan editor for admin layout management - Implement `FloorplanEditor.svelte` component for adding, editing, and positioning spaces. - Add backend support for floorplan image upload and batch updating space positions. - Update Prisma schema to include `planImageUrl` for floors. - Enable API proxy in Vite configuration for straightforward local development. - Refactor API calls to use a centralized `apiFetch` utility with token handling. --- .idea/workspace.xml | 73 ++--- apps/api/prisma/schema.prisma | 15 +- apps/api/src/spaces/spaces.controller.ts | 16 +- apps/api/src/spaces/spaces.service.ts | 34 +++ apps/web/package.json | 1 + apps/web/src/lib/api/client.ts | 24 +- .../components/admin/FloorplanEditor.svelte | 283 ++++++++++++++++++ .../routes/admin/floorplan/[id]/+page.svelte | 24 ++ .../src/routes/admin/floorplan/[id]/+page.ts | 13 + apps/web/src/routes/dashboard/+page.svelte | 18 +- .../routes/dashboard/floor/[id]/+page.svelte | 17 +- apps/web/src/routes/login/+page.svelte | 24 +- apps/web/vite.config.ts | 7 + package-lock.json | 14 + 14 files changed, 482 insertions(+), 81 deletions(-) create mode 100644 apps/web/src/lib/components/admin/FloorplanEditor.svelte create mode 100644 apps/web/src/routes/admin/floorplan/[id]/+page.svelte create mode 100644 apps/web/src/routes/admin/floorplan/[id]/+page.ts diff --git a/.idea/workspace.xml b/.idea/workspace.xml index da60d5f..7a97e30 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -6,13 +6,15 @@ - - + + + + - @@ -40,42 +42,44 @@ - start:dev.executor": "Run", - "npm.web > dev.executor": "Run", - "settings.editor.selected.configurable": "settings.javascript.runtime", - "to.speed.mode.migration.done": "true", - "ts.external.directory.path": "/home/micosil/WebstormProjects/desker/node_modules/typescript/lib", - "vue.rearranger.settings.migration": "true" + { + "keyToString": { + "Docker.docker-compose.yml: Compose Deployment.executor": "Run", + "ModuleVcsDetector.initialDetectionPerformed": "true", + "RunOnceActivity.MCP Project settings loaded": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true", + "RunOnceActivity.git.unshallow": "true", + "RunOnceActivity.typescript.service.memoryLimit.init": "true", + "codeWithMe.voiceChat.enabledByDefault": "false", + "com.intellij.ml.llm.matterhorn.ej.ui.settings.DefaultModelSelectionForGA.v1": "true", + "git-widget-placeholder": "main", + "javascript.preferred.runtime.type.id": "node", + "junie.onboarding.icon.badge.shown": "true", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_interpreter_path": "/home/micosil/.nvm/versions/node/v22.21.1/bin/node", + "nodejs_package_manager_path": "npm", + "npm.api > start:dev.executor": "Run", + "npm.web > dev.executor": "Run", + "settings.editor.selected.configurable": "settings.javascript.runtime", + "to.speed.mode.migration.done": "true", + "ts.external.directory.path": "/home/micosil/WebstormProjects/desker/node_modules/typescript/lib", + "vue.rearranger.settings.migration": "true" }, - "keyToStringList": { - "DatabaseDriversLRU": [ - "postgresql" + "keyToStringList": { + "DatabaseDriversLRU": [ + "postgresql" ] } -}]]> +} - + + + @@ -130,6 +134,7 @@ 1774643312599 +