From 9bfdc19e68dae2afac595545ca2ac689ac9e7dcc Mon Sep 17 00:00:00 2001 From: Maurice Date: Sun, 30 Aug 2026 14:04:17 +0200 Subject: [PATCH] fix(admin): naver_list_import is an integration, not a trip addon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It has no trip tab and no page of its own — it pulls places from an external service, which is what the integration group is for. The type only drives grouping in the admin UI (and the global nav check), so existing installs just see the tile move; migration appended for them, seed fixed for fresh ones. --- server/src/db/migrations.ts | 15 +++++++++++++++ server/src/db/seeds.ts | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/server/src/db/migrations.ts b/server/src/db/migrations.ts index f65199644..abaa917e8 100644 --- a/server/src/db/migrations.ts +++ b/server/src/db/migrations.ts @@ -4176,6 +4176,21 @@ function runMigrations(db: Database.Database): void { db.exec("ALTER TABLE mcp_tokens ADD COLUMN kind TEXT NOT NULL DEFAULT 'mcp'"); } }, + /** + * `naver_list_import` was typed 'trip', but a trip addon is one that earns its own + * tab inside a trip — this one has no tab (it is not in tripTabs.ts) and no page. It + * calls an external service to pull places into the sidebar, which is exactly what + * 'integration' means here. + * + * The type is presentational: only `type === 'global'` is read anywhere + * (client navItems.ts), so this moves the tile between admin groups and changes + * nothing about how the import behaves. + * + * Appended LAST: the array is index-addressed against schema_version. + */ + () => { + db.prepare("UPDATE addons SET type = 'integration' WHERE id = 'naver_list_import'").run(); + }, ]; if (currentVersion < migrations.length) { diff --git a/server/src/db/seeds.ts b/server/src/db/seeds.ts index cee241872..eef8cc888 100644 --- a/server/src/db/seeds.ts +++ b/server/src/db/seeds.ts @@ -118,7 +118,7 @@ function seedAddons(db: Database.Database): void { { id: 'vacay', name: 'Vacay', description: 'Personal vacation day planner with calendar view', type: 'global', icon: 'CalendarDays', enabled: 1, sort_order: 10 }, { id: 'atlas', name: 'Atlas', description: 'World map of your visited countries with travel stats', type: 'global', icon: 'Globe', enabled: 1, sort_order: 11 }, { id: 'mcp', name: 'MCP', description: 'Model Context Protocol for AI assistant integration', type: 'integration', icon: 'Terminal', enabled: 0, sort_order: 12 }, - { id: 'naver_list_import', name: 'Naver List Import', description: 'Import places from shared Naver Maps lists', type: 'trip', icon: 'Link2', enabled: 1, sort_order: 13 }, + { id: 'naver_list_import', name: 'Naver List Import', description: 'Import places from a shared Naver Maps list', type: 'integration', icon: 'Link2', enabled: 1, sort_order: 13 }, { id: 'collab', name: 'Collab', description: 'Notes, polls, and live chat for trip collaboration', type: 'trip', icon: 'Users', enabled: 1, sort_order: 6 }, { id: 'journey', name: 'Journey', description: 'Trip tracking & travel journal — check-ins, photos, daily stories', type: 'global', icon: 'Compass', enabled: 0, sort_order: 35 }, { id: 'airtrail', name: 'AirTrail', description: 'Sync flights from your self-hosted AirTrail instance', type: 'integration', icon: 'Plane', enabled: 0, sort_order: 14 },