From 7bc4db7e6367b8c73656f174f5ed1deb7931821c Mon Sep 17 00:00:00 2001 From: Till JS Date: Tue, 31 Mar 2026 16:56:37 +0200 Subject: [PATCH] fix(builds): repair inventar settings import and add skilltree storage service - inventar-web: fix mangled icon import in settings page - skilltree-web: create missing lib/services/storage.ts for export/import - startup.sh: add umami/synapse DB creation + synapse user setup with C locale Co-Authored-By: Claude Opus 4.6 --- .../src/routes/(app)/settings/+page.svelte | 3 +- .../apps/web/src/lib/services/storage.ts | 32 +++++++++++++++++++ scripts/mac-mini/startup.sh | 10 +++++- 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 apps/skilltree/apps/web/src/lib/services/storage.ts diff --git a/apps/inventar/apps/web/src/routes/(app)/settings/+page.svelte b/apps/inventar/apps/web/src/routes/(app)/settings/+page.svelte index 409fa27bd..4f39d32c4 100644 --- a/apps/inventar/apps/web/src/routes/(app)/settings/+page.svelte +++ b/apps/inventar/apps/web/src/routes/(app)/settings/+page.svelte @@ -3,7 +3,8 @@ import { authStore } from '$lib/stores/auth.svelte'; import { userSettings } from '$lib/stores/user-settings.svelte'; import { APP_VERSION } from '$lib/version'; - import { Info, SignOut, Tag, User, import { Envelope } from '@manacore/shared-icons'; + import { Envelope, Info, SignOut, Tag, User } from '@manacore/shared-icons'; + import { SettingsPage, SettingsSection, SettingsCard, diff --git a/apps/skilltree/apps/web/src/lib/services/storage.ts b/apps/skilltree/apps/web/src/lib/services/storage.ts new file mode 100644 index 000000000..03e1887f2 --- /dev/null +++ b/apps/skilltree/apps/web/src/lib/services/storage.ts @@ -0,0 +1,32 @@ +import { skillCollection, activityCollection, achievementCollection } from '$lib/data/local-store'; + +export async function exportData() { + const [skills, activities, achievements] = await Promise.all([ + skillCollection.getAll(), + activityCollection.getAll(), + achievementCollection.getAll(), + ]); + return { skills, activities, achievements, exportedAt: new Date().toISOString() }; +} + +export async function importData(data: { + skills?: unknown[]; + activities?: unknown[]; + achievements?: unknown[]; +}) { + if (Array.isArray(data.skills)) { + for (const skill of data.skills) { + await skillCollection.insert(skill as never).catch(() => null); + } + } + if (Array.isArray(data.activities)) { + for (const activity of data.activities) { + await activityCollection.insert(activity as never).catch(() => null); + } + } + if (Array.isArray(data.achievements)) { + for (const achievement of data.achievements) { + await achievementCollection.insert(achievement as never).catch(() => null); + } + } +} diff --git a/scripts/mac-mini/startup.sh b/scripts/mac-mini/startup.sh index fef116949..b0e2efa03 100755 --- a/scripts/mac-mini/startup.sh +++ b/scripts/mac-mini/startup.sh @@ -131,8 +131,16 @@ log "Containers running: $RUNNING" # ─── Create missing databases ─── log "Ensuring databases exist..." -for db in mana_auth mana_credits chat todo calendar clock contacts storage; do +for db in mana_auth mana_credits chat todo calendar clock contacts storage umami; do docker exec mana-infra-postgres psql -U postgres -c "CREATE DATABASE $db;" 2>/dev/null || true done +# Matrix Synapse: needs its own user and C-locale database +docker exec mana-infra-postgres psql -U postgres -c \ + "DO \$\$ BEGIN IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname='synapse') THEN CREATE USER synapse WITH PASSWORD 'synapse-secure-password'; END IF; END \$\$;" \ + 2>/dev/null || true +docker exec mana-infra-postgres psql -U postgres -c \ + "CREATE DATABASE matrix OWNER synapse ENCODING UTF8 LC_COLLATE='C' LC_CTYPE='C' TEMPLATE template0;" \ + 2>/dev/null || true + log "=== Startup Complete ($RUNNING containers running) ==="