From 2cfbaf000c4ae586bcf3f1775bb5aa919085ff5e Mon Sep 17 00:00:00 2001 From: Alex Hope-O'Connor Date: Sat, 28 Feb 2026 22:17:20 +1000 Subject: [PATCH] Reorganise Infrastructure/Services into feature namespaces - Move registration marker interfaces to Registration/Abstractions - Add feature folders with Abstractions subfolders: EffectiveConfig, Dnsmasq/Config, Dnsmasq/Hosts, Dnsmasq/Leases, Dnsmasq/Reload, Logs, Updates, UI/Settings, Common/Process - Place interfaces in each feature's Abstractions namespace; align implementation namespaces to folder paths - Update Program, extensions, controllers, hubs, helpers, components, and tests to use new namespaces - Remove old flat Services/Abstractions and root-level service files --- src/DnsmasqWebUI.Tests/DnsmasqConfigSetServiceTests.cs | 2 +- .../EffectiveConfig/EffectiveConfigFieldDisplay.razor | 2 +- .../EffectiveConfig/EffectiveConfigSaveFlow.razor | 2 +- .../EffectiveConfig/EffectiveConfigSaveModal.razor | 2 +- .../EffectiveConfig/EffectiveConfigSection.razor | 2 +- .../EffectiveConfig/EffectiveConfigValueDisplayBase.cs | 2 +- .../Components/Modals/SettingsModal.razor.cs | 2 +- src/DnsmasqWebUI/Components/_Imports.razor | 10 +++++++++- src/DnsmasqWebUI/Controllers/ConfigController.cs | 3 ++- src/DnsmasqWebUI/Controllers/DhcpController.cs | 3 ++- src/DnsmasqWebUI/Controllers/HostsController.cs | 3 ++- src/DnsmasqWebUI/Controllers/LeasesController.cs | 2 +- src/DnsmasqWebUI/Controllers/ReloadController.cs | 2 +- src/DnsmasqWebUI/Controllers/StatusController.cs | 3 ++- .../Extensions/LoggingBuilderExtensions.cs | 4 ++-- .../Extensions/ServiceCollectionExtensions.cs | 2 +- src/DnsmasqWebUI/Hubs/LogsHub.cs | 2 +- .../Client/Abstractions/IReloadClient.cs | 2 +- src/DnsmasqWebUI/Infrastructure/Client/ReloadClient.cs | 2 +- .../Client/SameHostBaseAddressHandler.cs | 2 +- .../Helpers/Config/EffectiveConfigFieldBuilder.cs | 2 +- .../EffectiveConfigFieldDescriptorListExtensions.cs | 2 +- .../Helpers/Config/EffectiveConfigViews.cs | 2 +- .../Infrastructure/Logging/AppLogsLoggerProvider.cs | 2 +- .../Process}/Abstractions/IProcessRunner.cs | 3 ++- .../Services/{ => Common/Process}/ProcessRunner.cs | 8 ++++---- .../Config}/Abstractions/IConfigSetCache.cs | 3 ++- .../Config}/Abstractions/IDnsmasqConfigService.cs | 3 ++- .../Config}/Abstractions/IDnsmasqConfigSetService.cs | 3 ++- .../Services/{ => Dnsmasq/Config}/ConfigSetCache.cs | 4 ++-- .../{ => Dnsmasq/Config}/DnsmasqConfigService.cs | 4 ++-- .../{ => Dnsmasq/Config}/DnsmasqConfigSetService.cs | 4 ++-- .../Config}/EnsureManagedConfigHostedService.cs | 5 +++-- .../{ => Dnsmasq/Hosts}/Abstractions/IHostsCache.cs | 3 ++- .../Hosts}/Abstractions/IHostsFileService.cs | 3 ++- .../Services/{ => Dnsmasq/Hosts}/HostsCache.cs | 5 +++-- .../Services/{ => Dnsmasq/Hosts}/HostsFileService.cs | 5 +++-- .../{ => Dnsmasq/Leases}/Abstractions/ILeasesCache.cs | 3 ++- .../Leases}/Abstractions/ILeasesFileService.cs | 3 ++- .../Services/{ => Dnsmasq/Leases}/LeasesCache.cs | 5 +++-- .../Services/{ => Dnsmasq/Leases}/LeasesFileService.cs | 4 ++-- .../Reload}/Abstractions/IReloadService.cs | 4 +++- .../Services/{ => Dnsmasq/Reload}/ReloadService.cs | 5 +++-- .../Abstractions/IEffectiveConfigEditSession.cs | 3 ++- .../IEffectiveConfigRenderFragmentRegistry.cs | 3 ++- .../EffectiveConfigEditSession.cs | 5 +++-- .../EffectiveConfigRenderFragmentRegistry.cs | 4 ++-- .../Services/{ => Logs}/Abstractions/IAppLogsBuffer.cs | 2 +- .../Services/{ => Logs}/Abstractions/ILogsService.cs | 2 +- .../Services/{ => Logs}/AppLogsBuffer.cs | 8 +++++--- .../{ => Logs}/AppLogsPushTriggeredHostedService.cs | 5 +++-- .../ApplicationLifecycleLoggingHostedService.cs | 4 ++-- .../{ => Logs}/LogsFileWatcherHostedService.cs | 6 ++++-- .../Infrastructure/Services/{ => Logs}/LogsService.cs | 5 +++-- .../Abstractions/IApplicationHostedService.cs | 2 +- .../Abstractions/IApplicationScopedConcrete.cs | 2 +- .../Abstractions/IApplicationScopedService.cs | 2 +- .../Abstractions/IApplicationSingleton.cs | 2 +- .../Settings}/Abstractions/IClientSettingsService.cs | 3 ++- .../Settings}/Abstractions/ISettingsModalService.cs | 2 +- .../{ => UI/Settings}/ClientSettingsService.cs | 4 ++-- .../Services/{ => UI/Settings}/SettingsModalService.cs | 4 ++-- .../{ => Updates}/Abstractions/IUpdateCheckService.cs | 2 +- .../Services/{ => Updates}/UpdateCheckHostedService.cs | 5 +++-- .../Services/{ => Updates}/UpdateCheckService.cs | 4 ++-- .../Models/Dnsmasq/SaveWithReloadResult.cs | 2 +- src/DnsmasqWebUI/Program.cs | 6 ++++-- 67 files changed, 133 insertions(+), 93 deletions(-) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Common/Process}/Abstractions/IProcessRunner.cs (84%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Common/Process}/ProcessRunner.cs (94%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Config}/Abstractions/IConfigSetCache.cs (87%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Config}/Abstractions/IDnsmasqConfigService.cs (91%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Config}/Abstractions/IDnsmasqConfigSetService.cs (90%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Config}/ConfigSetCache.cs (99%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Config}/DnsmasqConfigService.cs (99%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Config}/DnsmasqConfigSetService.cs (95%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Config}/EnsureManagedConfigHostedService.cs (95%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Hosts}/Abstractions/IHostsCache.cs (81%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Hosts}/Abstractions/IHostsFileService.cs (80%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Hosts}/HostsCache.cs (97%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Hosts}/HostsFileService.cs (89%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Leases}/Abstractions/ILeasesCache.cs (81%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Leases}/Abstractions/ILeasesFileService.cs (81%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Leases}/LeasesCache.cs (95%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Leases}/LeasesFileService.cs (87%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Reload}/Abstractions/IReloadService.cs (84%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Dnsmasq/Reload}/ReloadService.cs (92%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => EffectiveConfig}/Abstractions/IEffectiveConfigEditSession.cs (84%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => EffectiveConfig}/Abstractions/IEffectiveConfigRenderFragmentRegistry.cs (91%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => EffectiveConfig}/EffectiveConfigEditSession.cs (91%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => EffectiveConfig}/EffectiveConfigRenderFragmentRegistry.cs (98%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Logs}/Abstractions/IAppLogsBuffer.cs (89%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Logs}/Abstractions/ILogsService.cs (93%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Logs}/AppLogsBuffer.cs (81%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Logs}/AppLogsPushTriggeredHostedService.cs (91%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Logs}/ApplicationLifecycleLoggingHostedService.cs (95%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Logs}/LogsFileWatcherHostedService.cs (94%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Logs}/LogsService.cs (97%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Registration}/Abstractions/IApplicationHostedService.cs (82%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Registration}/Abstractions/IApplicationScopedConcrete.cs (76%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Registration}/Abstractions/IApplicationScopedService.cs (73%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Registration}/Abstractions/IApplicationSingleton.cs (73%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => UI/Settings}/Abstractions/IClientSettingsService.cs (80%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => UI/Settings}/Abstractions/ISettingsModalService.cs (93%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => UI/Settings}/ClientSettingsService.cs (95%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => UI/Settings}/SettingsModalService.cs (77%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Updates}/Abstractions/IUpdateCheckService.cs (94%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Updates}/UpdateCheckHostedService.cs (88%) rename src/DnsmasqWebUI/Infrastructure/Services/{ => Updates}/UpdateCheckService.cs (97%) diff --git a/src/DnsmasqWebUI.Tests/DnsmasqConfigSetServiceTests.cs b/src/DnsmasqWebUI.Tests/DnsmasqConfigSetServiceTests.cs index 5bbc74e..92e53f8 100644 --- a/src/DnsmasqWebUI.Tests/DnsmasqConfigSetServiceTests.cs +++ b/src/DnsmasqWebUI.Tests/DnsmasqConfigSetServiceTests.cs @@ -1,7 +1,7 @@ using DnsmasqWebUI.Models.Config; using DnsmasqWebUI.Models.Dnsmasq; using DnsmasqWebUI.Models.Dnsmasq.EffectiveConfig; -using DnsmasqWebUI.Infrastructure.Services; +using DnsmasqWebUI.Infrastructure.Services.Dnsmasq.Config; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; diff --git a/src/DnsmasqWebUI/Components/Dnsmasq/EffectiveConfig/EffectiveConfigFieldDisplay.razor b/src/DnsmasqWebUI/Components/Dnsmasq/EffectiveConfig/EffectiveConfigFieldDisplay.razor index c31abcc..621ce95 100644 --- a/src/DnsmasqWebUI/Components/Dnsmasq/EffectiveConfig/EffectiveConfigFieldDisplay.razor +++ b/src/DnsmasqWebUI/Components/Dnsmasq/EffectiveConfig/EffectiveConfigFieldDisplay.razor @@ -3,7 +3,7 @@ @using DnsmasqWebUI.Models.Dnsmasq.EffectiveConfig @using DnsmasqWebUI.Models.Config @using DnsmasqWebUI.Infrastructure.Helpers.Config -@using DnsmasqWebUI.Infrastructure.Services.Abstractions +@using DnsmasqWebUI.Infrastructure.Services.EffectiveConfig.Abstractions @inject IEffectiveConfigRenderFragmentRegistry RenderFragmentRegistry @* Custom fragment renders only the value; we keep the row shell (label + value slot + badge) here for consistency. Pending value shown until save. *@ diff --git a/src/DnsmasqWebUI/Components/Dnsmasq/EffectiveConfig/EffectiveConfigSaveFlow.razor b/src/DnsmasqWebUI/Components/Dnsmasq/EffectiveConfig/EffectiveConfigSaveFlow.razor index c59c9e5..4bfb39d 100644 --- a/src/DnsmasqWebUI/Components/Dnsmasq/EffectiveConfig/EffectiveConfigSaveFlow.razor +++ b/src/DnsmasqWebUI/Components/Dnsmasq/EffectiveConfig/EffectiveConfigSaveFlow.razor @@ -1,7 +1,7 @@ @namespace DnsmasqWebUI.Components.Dnsmasq.EffectiveConfig @using DnsmasqWebUI.Models.Dnsmasq @using DnsmasqWebUI.Models.Dnsmasq.EffectiveConfig -@using DnsmasqWebUI.Infrastructure.Services.Abstractions +@using DnsmasqWebUI.Infrastructure.Services.EffectiveConfig.Abstractions @if (ShowModal) { diff --git a/src/DnsmasqWebUI/Components/Dnsmasq/EffectiveConfig/EffectiveConfigSaveModal.razor b/src/DnsmasqWebUI/Components/Dnsmasq/EffectiveConfig/EffectiveConfigSaveModal.razor index ed168a6..9c49fe1 100644 --- a/src/DnsmasqWebUI/Components/Dnsmasq/EffectiveConfig/EffectiveConfigSaveModal.razor +++ b/src/DnsmasqWebUI/Components/Dnsmasq/EffectiveConfig/EffectiveConfigSaveModal.razor @@ -1,7 +1,7 @@ @namespace DnsmasqWebUI.Components.Dnsmasq.EffectiveConfig @using DnsmasqWebUI.Models.Dnsmasq @using DnsmasqWebUI.Models.Dnsmasq.EffectiveConfig -@using DnsmasqWebUI.Infrastructure.Services.Abstractions +@using DnsmasqWebUI.Infrastructure.Services.EffectiveConfig.Abstractions