From 01fd4e37391a8d26658ee3b65a1eff753c79409f Mon Sep 17 00:00:00 2001 From: Maurice Date: Sat, 10 Oct 2026 12:20:13 +0200 Subject: [PATCH] refactor(admin): the admin routes other domains serve keep their DTOs in those domains NotificationsController, SettingsController, OidcController and the packing template controller each imported their body DTO from admin/admin.dto.ts, and AdminController imported the same four without using them. Those imports tied the notifications, settings, packing and oidc domains to the admin domain and through it to everything admin depends on. The classes move unchanged (same names, same @trek/shared schemas) into each domain's own dto file. --- .../scripts/import-boundaries-baseline.json | 42 ------------------- server/src/nest/admin/admin.controller.ts | 4 -- server/src/nest/admin/admin.dto.ts | 17 ++------ .../notifications/notifications.controller.ts | 2 +- .../nest/notifications/notifications.dto.ts | 6 +++ server/src/nest/oidc/oidc.controller.ts | 2 +- server/src/nest/oidc/oidc.dto.ts | 5 +++ .../admin-packing-templates.controller.ts | 2 +- server/src/nest/packing/packing.dto.ts | 4 ++ .../src/nest/settings/settings.controller.ts | 3 +- server/src/nest/settings/settings.dto.ts | 5 ++- 11 files changed, 27 insertions(+), 65 deletions(-) create mode 100644 server/src/nest/oidc/oidc.dto.ts diff --git a/server/scripts/import-boundaries-baseline.json b/server/scripts/import-boundaries-baseline.json index c3a2a5ee0..5a9efa192 100644 --- a/server/scripts/import-boundaries-baseline.json +++ b/server/scripts/import-boundaries-baseline.json @@ -6,38 +6,16 @@ "accommodations -> places", "accommodations -> realtime", "addons -> memories", - "addons -> settings", "addons -> transit", - "admin -> addons", - "admin -> auth", - "admin -> booking-import", - "admin -> llm-parse", - "admin -> memories", - "admin -> notifications", - "admin -> oauth", - "admin -> packing", - "admin -> plugins", - "admin -> realtime", - "admin -> settings", "assignments -> days", "assignments -> journey", "assignments -> mcp-shared", "assignments -> realtime", "atlas -> addons", - "atlas -> geo", "auth -> budget", "auth -> files", - "auth -> maps", "auth -> notifications", "auth -> plugins", - "auth -> settings", - "booking-import -> addons", - "booking-import -> budget", - "booking-import -> llm-parse", - "booking-import -> maps", - "booking-import -> places", - "booking-import -> realtime", - "booking-import -> reservations", "budget -> addons", "budget -> mcp-shared", "budget -> realtime", @@ -74,25 +52,18 @@ "journey -> addons", "journey -> atlas", "journey -> files", - "journey -> maps", "journey -> memories", "journey -> photos", "journey -> realtime", - "journey -> settings", "llm-parse -> addons", - "llm-parse -> settings", "maps -> geo", - "maps -> settings", "mcp-shared -> realtime", "memories -> addons", "memories -> notifications", "memories -> photos", "memories -> realtime", - "notifications -> admin", "notifications -> realtime", - "oauth -> addons", "packing -> addons", - "packing -> admin", "packing -> mcp-shared", "packing -> notifications", "packing -> realtime", @@ -101,10 +72,8 @@ "places -> assignments", "places -> atlas", "places -> journey", - "places -> maps", "places -> mcp-shared", "places -> realtime", - "places -> unsplash", "plugins -> accommodations", "plugins -> addons", "plugins -> assignments", @@ -118,7 +87,6 @@ "plugins -> files", "plugins -> journey", "plugins -> llm-parse", - "plugins -> maps", "plugins -> notifications", "plugins -> packing", "plugins -> places", @@ -137,15 +105,12 @@ "reservations -> mcp-shared", "reservations -> notifications", "reservations -> realtime", - "settings -> admin", "todo -> addons", "todo -> mcp-shared", "todo -> realtime", "transit -> days", - "transit -> maps", "transit -> mcp-shared", "transit -> reservations", - "transit -> settings", "trip-members -> auth", "trip-members -> budget", "trip-members -> notifications", @@ -174,13 +139,10 @@ "trips -> places", "trips -> realtime", "trips -> reservations", - "trips -> settings", "trips -> todo", "trips -> trip-members", "trips -> trip-read-model", - "trips -> unsplash", "trips -> vacay", - "unsplash -> settings", "vacay -> addons", "vacay -> auth", "vacay -> notifications", @@ -228,9 +190,6 @@ "journey -> storage/storage-upload.factory.ts", "maps -> geo/nominatim.client.ts", "maps -> settings/instance-api-keys.ts", - "notifications -> admin/admin.dto.ts", - "oidc -> admin/admin.dto.ts", - "packing -> admin/admin.dto.ts", "place-enrichment -> maps/maps.helpers.ts", "place-enrichment -> maps/trek-places.client.ts", "places -> atlas/atlas-geo.ts", @@ -251,7 +210,6 @@ "roadtrip -> plugins/contributions/plugin-route-normalize.ts", "roadtrip -> plugins/contributions/plugin-search.helpers.ts", "roadtrip -> plugins/kill-switch.ts", - "settings -> admin/admin.dto.ts", "transit -> maps/maps.helpers.ts", "transit -> settings/instance-api-keys.ts", "trip-members -> trips/trips.dto.ts", diff --git a/server/src/nest/admin/admin.controller.ts b/server/src/nest/admin/admin.controller.ts index c6482ea35..c74376b1d 100644 --- a/server/src/nest/admin/admin.controller.ts +++ b/server/src/nest/admin/admin.controller.ts @@ -12,12 +12,8 @@ import { AdminPermissionsDto, AdminInviteCreateDto, AdminFeatureToggleDto, - AdminTemplateNameDto, - AdminOidcUpdateDto, AdminAddonUpdateDto, AdminCollabFeaturesDto, - AdminNotificationPreferencesDto, - AdminDefaultUserSettingsDto, AdminTestNotificationDto, AdminTransitProviderDto, } from './admin.dto'; diff --git a/server/src/nest/admin/admin.dto.ts b/server/src/nest/admin/admin.dto.ts index e94be0e80..0478f65c1 100644 --- a/server/src/nest/admin/admin.dto.ts +++ b/server/src/nest/admin/admin.dto.ts @@ -5,13 +5,8 @@ import { adminPermissionsRequestSchema, adminInviteCreateRequestSchema, adminFeatureToggleRequestSchema, - adminTemplateNameRequestSchema, - adminOidcUpdateRequestSchema, adminAddonUpdateRequestSchema, adminCollabFeaturesRequestSchema, - adminNotificationPreferencesRequestSchema, - notificationDefaultsUpdateRequestSchema, - adminDefaultUserSettingsRequestSchema, adminTestNotificationRequestSchema, adminTransitProviderRequestSchema, } from '@trek/shared'; @@ -22,21 +17,17 @@ import { * parameter typed with one of these classes by metatype — the Zod schemas in * shared/ remain the single source of truth for the wire contract. * - * Thirteen classes cover the AdminController body contracts: - * the four feature toggles share AdminFeatureToggleDto and the six - * packing-template create/update routes share AdminTemplateNameDto. + * These cover the AdminController body contracts; the four feature toggles + * share AdminFeatureToggleDto. The admin routes served by other domains + * (packing templates, OIDC, notification and user-setting defaults) keep their + * DTOs in those domains, so a domain controller never imports the admin domain. */ export class AdminUserCreateDto extends createZodDto(adminUserCreateRequestSchema) {} export class AdminUserUpdateDto extends createZodDto(adminUserUpdateRequestSchema) {} export class AdminPermissionsDto extends createZodDto(adminPermissionsRequestSchema) {} export class AdminInviteCreateDto extends createZodDto(adminInviteCreateRequestSchema) {} export class AdminFeatureToggleDto extends createZodDto(adminFeatureToggleRequestSchema) {} -export class AdminTemplateNameDto extends createZodDto(adminTemplateNameRequestSchema) {} -export class AdminOidcUpdateDto extends createZodDto(adminOidcUpdateRequestSchema) {} export class AdminAddonUpdateDto extends createZodDto(adminAddonUpdateRequestSchema) {} export class AdminCollabFeaturesDto extends createZodDto(adminCollabFeaturesRequestSchema) {} -export class AdminNotificationPreferencesDto extends createZodDto(adminNotificationPreferencesRequestSchema) {} -export class NotificationDefaultsUpdateDto extends createZodDto(notificationDefaultsUpdateRequestSchema) {} -export class AdminDefaultUserSettingsDto extends createZodDto(adminDefaultUserSettingsRequestSchema) {} export class AdminTestNotificationDto extends createZodDto(adminTestNotificationRequestSchema) {} export class AdminTransitProviderDto extends createZodDto(adminTransitProviderRequestSchema) {} diff --git a/server/src/nest/notifications/notifications.controller.ts b/server/src/nest/notifications/notifications.controller.ts index 475aa2e63..1772d6d34 100644 --- a/server/src/nest/notifications/notifications.controller.ts +++ b/server/src/nest/notifications/notifications.controller.ts @@ -25,7 +25,7 @@ import { import { JwtAuthGuard } from '../auth-core/jwt-auth.guard'; import { AdminGuard } from '../auth-core/admin.guard'; import { NotificationPreferencesService } from './notification-preferences.service'; -import { AdminNotificationPreferencesDto, NotificationDefaultsUpdateDto } from '../admin/admin.dto'; +import { AdminNotificationPreferencesDto, NotificationDefaultsUpdateDto } from './notifications.dto'; import { CurrentUser } from '../auth-core/current-user.decorator'; import { ManagedForbidden } from '../common/managed'; diff --git a/server/src/nest/notifications/notifications.dto.ts b/server/src/nest/notifications/notifications.dto.ts index 253bed0b0..b458619f0 100644 --- a/server/src/nest/notifications/notifications.dto.ts +++ b/server/src/nest/notifications/notifications.dto.ts @@ -1,5 +1,7 @@ import { createZodDto } from 'nestjs-zod'; import { + adminNotificationPreferencesRequestSchema, + notificationDefaultsUpdateRequestSchema, preferencesUpdateRequestSchema, testSmtpRequestSchema, testWebhookRequestSchema, @@ -23,3 +25,7 @@ export class TestNtfyDto extends createZodDto(testNtfyRequestSchema) {} export class NotificationRespondDto extends createZodDto(notificationRespondRequestSchema) {} export class PushSubscribeDto extends createZodDto(pushSubscribeRequestSchema) {} export class PushUnsubscribeDto extends createZodDto(pushUnsubscribeRequestSchema) {} + +/** The admin-side notification routes NotificationsController serves. */ +export class AdminNotificationPreferencesDto extends createZodDto(adminNotificationPreferencesRequestSchema) {} +export class NotificationDefaultsUpdateDto extends createZodDto(notificationDefaultsUpdateRequestSchema) {} diff --git a/server/src/nest/oidc/oidc.controller.ts b/server/src/nest/oidc/oidc.controller.ts index 26c23c2e7..ed5676ff3 100644 --- a/server/src/nest/oidc/oidc.controller.ts +++ b/server/src/nest/oidc/oidc.controller.ts @@ -10,7 +10,7 @@ import { CurrentUser } from '../auth-core/current-user.decorator'; import type { User } from '../../types'; import { AuditService } from '../audit/audit.service'; import { getClientIp } from '../audit/client-ip'; -import { AdminOidcUpdateDto } from '../admin/admin.dto'; +import { AdminOidcUpdateDto } from './oidc.dto'; import { Public } from '../auth-core/public.decorator'; import { ManagedForbidden } from '../common/managed'; import { sessionClientFrom } from '../sessions/sessions.service'; diff --git a/server/src/nest/oidc/oidc.dto.ts b/server/src/nest/oidc/oidc.dto.ts new file mode 100644 index 000000000..e6e6daf42 --- /dev/null +++ b/server/src/nest/oidc/oidc.dto.ts @@ -0,0 +1,5 @@ +import { createZodDto } from 'nestjs-zod'; +import { adminOidcUpdateRequestSchema } from '@trek/shared'; + +/** Body of the admin OIDC settings route OidcController serves. */ +export class AdminOidcUpdateDto extends createZodDto(adminOidcUpdateRequestSchema) {} diff --git a/server/src/nest/packing/admin-packing-templates.controller.ts b/server/src/nest/packing/admin-packing-templates.controller.ts index bc8d0fe59..eb7f6e389 100644 --- a/server/src/nest/packing/admin-packing-templates.controller.ts +++ b/server/src/nest/packing/admin-packing-templates.controller.ts @@ -1,7 +1,7 @@ import { Body, Controller, Delete, Get, HttpCode, HttpException, Param, Post, Put, Req, UseGuards } from '@nestjs/common'; import type { Request } from 'express'; import { PackingService } from './packing.service'; -import { AdminTemplateNameDto } from '../admin/admin.dto'; +import { AdminTemplateNameDto } from './packing.dto'; import { JwtAuthGuard } from '../auth-core/jwt-auth.guard'; import { AdminGuard } from '../auth-core/admin.guard'; import { CurrentUser } from '../auth-core/current-user.decorator'; diff --git a/server/src/nest/packing/packing.dto.ts b/server/src/nest/packing/packing.dto.ts index 1757451a2..c97384cea 100644 --- a/server/src/nest/packing/packing.dto.ts +++ b/server/src/nest/packing/packing.dto.ts @@ -1,5 +1,6 @@ import { createZodDto } from 'nestjs-zod'; import { + adminTemplateNameRequestSchema, packingCreateItemRequestSchema, packingUpdateItemRequestSchema, packingSetSharingRequestSchema, @@ -30,3 +31,6 @@ export class PackingBagMembersDto extends createZodDto(packingBagMembersRequestS export class PackingSaveTemplateDto extends createZodDto(packingSaveTemplateRequestSchema) {} export class PackingApplyTemplateDto extends createZodDto(packingApplyTemplateRequestSchema) {} export class PackingCategoryAssigneesDto extends createZodDto(packingCategoryAssigneesRequestSchema) {} + +/** The six packing-template create/update routes of AdminPackingTemplatesController share this body. */ +export class AdminTemplateNameDto extends createZodDto(adminTemplateNameRequestSchema) {} diff --git a/server/src/nest/settings/settings.controller.ts b/server/src/nest/settings/settings.controller.ts index 90c664c02..3eb5628f8 100644 --- a/server/src/nest/settings/settings.controller.ts +++ b/server/src/nest/settings/settings.controller.ts @@ -3,8 +3,7 @@ import type { Request } from 'express'; import { MASKED_SETTING_VALUE } from '@trek/shared'; import type { User } from '../../types'; import { SettingsService, isAdminOnlyEndpointSetting } from './settings.service'; -import { SettingUpsertDto, SettingsBulkDto } from './settings.dto'; -import { AdminDefaultUserSettingsDto } from '../admin/admin.dto'; +import { AdminDefaultUserSettingsDto, SettingUpsertDto, SettingsBulkDto } from './settings.dto'; import { JwtAuthGuard } from '../auth-core/jwt-auth.guard'; import { AdminGuard } from '../auth-core/admin.guard'; import { AuditService } from '../audit/audit.service'; diff --git a/server/src/nest/settings/settings.dto.ts b/server/src/nest/settings/settings.dto.ts index e5e94feca..b494ebfb3 100644 --- a/server/src/nest/settings/settings.dto.ts +++ b/server/src/nest/settings/settings.dto.ts @@ -1,5 +1,5 @@ import { createZodDto } from 'nestjs-zod'; -import { settingUpsertRequestSchema, settingsBulkRequestSchema } from '@trek/shared'; +import { adminDefaultUserSettingsRequestSchema, settingUpsertRequestSchema, settingsBulkRequestSchema } from '@trek/shared'; /** * Server-side createZodDto wrappers over the @trek/shared settings contracts. @@ -9,3 +9,6 @@ import { settingUpsertRequestSchema, settingsBulkRequestSchema } from '@trek/sha */ export class SettingUpsertDto extends createZodDto(settingUpsertRequestSchema) {} export class SettingsBulkDto extends createZodDto(settingsBulkRequestSchema) {} + +/** The admin route for the instance-wide user-setting defaults. */ +export class AdminDefaultUserSettingsDto extends createZodDto(adminDefaultUserSettingsRequestSchema) {}