From a1be77f8000e04419ae7fd24a901f4737fb18266 Mon Sep 17 00:00:00 2001 From: Robert Dailey Date: Sun, 7 Apr 2024 12:49:07 -0500 Subject: [PATCH] refactor: Move HTTP-specific code to its own project --- Recyclarr.sln | 6 ++++++ Recyclarr.sln.DotSettings | 1 + src/Recyclarr.Cli/CompositionRoot.cs | 4 +++- .../ErrorHandling/ConsoleExceptionHandler.cs | 2 +- .../FlurlExtensions.cs | 2 +- .../Http => Recyclarr.Http}/FlurlLogging.cs | 2 +- .../FlurlLoggingEventHandlers.cs} | 8 +++---- .../FlurlSpecificEventHandler.cs | 2 +- src/Recyclarr.Http/HttpAutofacModule.cs | 21 +++++++++++++++++++ src/Recyclarr.Http/Recyclarr.Http.csproj | 8 +++++++ .../CustomFormat/CustomFormatApiService.cs | 1 - .../Servarr => }/IServarrRequestBuilder.cs | 2 +- .../MediaNaming/MediaNamingApiService.cs | 1 - .../QualityDefinitionApiService.cs | 1 - .../QualityProfileApiService.cs | 1 - .../Recyclarr.ServarrApi.csproj | 1 + ...acModule.cs => ServarrApiAutofacModule.cs} | 15 +------------ .../Servarr => }/ServarrRequestBuilder.cs | 3 ++- .../System/SystemApiService.cs | 1 - .../IntegrationTestFixture.cs | 4 +++- 20 files changed, 55 insertions(+), 31 deletions(-) rename src/{Recyclarr.ServarrApi/Http => Recyclarr.Http}/FlurlExtensions.cs (96%) rename src/{Recyclarr.ServarrApi/Http => Recyclarr.Http}/FlurlLogging.cs (95%) rename src/{Recyclarr.ServarrApi/Http/Servarr/ServarrFlurlEventHandlers.cs => Recyclarr.Http/FlurlLoggingEventHandlers.cs} (88%) rename src/{Recyclarr.ServarrApi/Http => Recyclarr.Http}/FlurlSpecificEventHandler.cs (90%) create mode 100644 src/Recyclarr.Http/HttpAutofacModule.cs create mode 100644 src/Recyclarr.Http/Recyclarr.Http.csproj rename src/Recyclarr.ServarrApi/{Http/Servarr => }/IServarrRequestBuilder.cs (79%) rename src/Recyclarr.ServarrApi/{ApiServicesAutofacModule.cs => ServarrApiAutofacModule.cs} (63%) rename src/Recyclarr.ServarrApi/{Http/Servarr => }/ServarrRequestBuilder.cs (97%) diff --git a/Recyclarr.sln b/Recyclarr.sln index be2fa101..7fb387c7 100644 --- a/Recyclarr.sln +++ b/Recyclarr.sln @@ -55,6 +55,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Recyclarr.Cli.IntegrationTe EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Recyclarr.Cli.Tests", "tests\Recyclarr.Cli.Tests\Recyclarr.Cli.Tests.csproj", "{59886A2A-338F-4864-9735-1633433B1F8F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Recyclarr.Http", "src\Recyclarr.Http\Recyclarr.Http.csproj", "{9B90CD1F-5D31-42A4-B0DD-A12BB7DC68CD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -137,6 +139,10 @@ Global {59886A2A-338F-4864-9735-1633433B1F8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {59886A2A-338F-4864-9735-1633433B1F8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {59886A2A-338F-4864-9735-1633433B1F8F}.Release|Any CPU.Build.0 = Release|Any CPU + {9B90CD1F-5D31-42A4-B0DD-A12BB7DC68CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9B90CD1F-5D31-42A4-B0DD-A12BB7DC68CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9B90CD1F-5D31-42A4-B0DD-A12BB7DC68CD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9B90CD1F-5D31-42A4-B0DD-A12BB7DC68CD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Recyclarr.sln.DotSettings b/Recyclarr.sln.DotSettings index 8a20513b..f7bf56ae 100644 --- a/Recyclarr.sln.DotSettings +++ b/Recyclarr.sln.DotSettings @@ -112,6 +112,7 @@ Recyclarr Cleanup True True + True True True True diff --git a/src/Recyclarr.Cli/CompositionRoot.cs b/src/Recyclarr.Cli/CompositionRoot.cs index df3cbd28..dfc6e520 100644 --- a/src/Recyclarr.Cli/CompositionRoot.cs +++ b/src/Recyclarr.Cli/CompositionRoot.cs @@ -17,6 +17,7 @@ using Recyclarr.Cli.Processors; using Recyclarr.Common; using Recyclarr.Compatibility; using Recyclarr.Config; +using Recyclarr.Http; using Recyclarr.Json; using Recyclarr.Platform; using Recyclarr.Repo; @@ -48,7 +49,8 @@ public static class CompositionRoot builder.RegisterModule(); builder.RegisterModule(); builder.RegisterModule(); - builder.RegisterModule(); + builder.RegisterModule(); + builder.RegisterModule(); builder.RegisterModule(); builder.RegisterModule(); builder.RegisterModule(); diff --git a/src/Recyclarr.Cli/Processors/ErrorHandling/ConsoleExceptionHandler.cs b/src/Recyclarr.Cli/Processors/ErrorHandling/ConsoleExceptionHandler.cs index fd422829..f76b743e 100644 --- a/src/Recyclarr.Cli/Processors/ErrorHandling/ConsoleExceptionHandler.cs +++ b/src/Recyclarr.Cli/Processors/ErrorHandling/ConsoleExceptionHandler.cs @@ -3,7 +3,7 @@ using Recyclarr.Cli.Console; using Recyclarr.Compatibility; using Recyclarr.Config.ExceptionTypes; using Recyclarr.Config.Parsing.ErrorHandling; -using Recyclarr.ServarrApi.Http; +using Recyclarr.Http; using Recyclarr.VersionControl; namespace Recyclarr.Cli.Processors.ErrorHandling; diff --git a/src/Recyclarr.ServarrApi/Http/FlurlExtensions.cs b/src/Recyclarr.Http/FlurlExtensions.cs similarity index 96% rename from src/Recyclarr.ServarrApi/Http/FlurlExtensions.cs rename to src/Recyclarr.Http/FlurlExtensions.cs index 9bbd570d..82043af1 100644 --- a/src/Recyclarr.ServarrApi/Http/FlurlExtensions.cs +++ b/src/Recyclarr.Http/FlurlExtensions.cs @@ -1,7 +1,7 @@ using System.Text.RegularExpressions; using Flurl.Http; -namespace Recyclarr.ServarrApi.Http; +namespace Recyclarr.Http; public static partial class FlurlExtensions { diff --git a/src/Recyclarr.ServarrApi/Http/FlurlLogging.cs b/src/Recyclarr.Http/FlurlLogging.cs similarity index 95% rename from src/Recyclarr.ServarrApi/Http/FlurlLogging.cs rename to src/Recyclarr.Http/FlurlLogging.cs index 82073fb7..7855e750 100644 --- a/src/Recyclarr.ServarrApi/Http/FlurlLogging.cs +++ b/src/Recyclarr.Http/FlurlLogging.cs @@ -2,7 +2,7 @@ using System.Text.Json; using Flurl; using Serilog; -namespace Recyclarr.ServarrApi.Http; +namespace Recyclarr.Http; public static class FlurlLogging { diff --git a/src/Recyclarr.ServarrApi/Http/Servarr/ServarrFlurlEventHandlers.cs b/src/Recyclarr.Http/FlurlLoggingEventHandlers.cs similarity index 88% rename from src/Recyclarr.ServarrApi/Http/Servarr/ServarrFlurlEventHandlers.cs rename to src/Recyclarr.Http/FlurlLoggingEventHandlers.cs index fa7f527b..dac57bfe 100644 --- a/src/Recyclarr.ServarrApi/Http/Servarr/ServarrFlurlEventHandlers.cs +++ b/src/Recyclarr.Http/FlurlLoggingEventHandlers.cs @@ -2,10 +2,10 @@ using Flurl.Http; using JetBrains.Annotations; using Serilog; -namespace Recyclarr.ServarrApi.Http.Servarr; +namespace Recyclarr.Http; [UsedImplicitly] -public class FlurlBeforeCallHandler(ILogger log) : FlurlSpecificEventHandler +public class FlurlBeforeCallLogRedactor(ILogger log) : FlurlSpecificEventHandler { public override FlurlEventType EventType => FlurlEventType.BeforeCall; @@ -18,7 +18,7 @@ public class FlurlBeforeCallHandler(ILogger log) : FlurlSpecificEventHandler } [UsedImplicitly] -public class FlurlAfterCallHandler(ILogger log) : FlurlSpecificEventHandler +public class FlurlAfterCallLogRedactor(ILogger log) : FlurlSpecificEventHandler { public override FlurlEventType EventType => FlurlEventType.AfterCall; @@ -38,7 +38,7 @@ public class FlurlAfterCallHandler(ILogger log) : FlurlSpecificEventHandler } [UsedImplicitly] -public class FlurlRedirectHandler(ILogger log) : FlurlSpecificEventHandler +public class FlurlRedirectPreventer(ILogger log) : FlurlSpecificEventHandler { public override FlurlEventType EventType => FlurlEventType.OnRedirect; diff --git a/src/Recyclarr.ServarrApi/Http/FlurlSpecificEventHandler.cs b/src/Recyclarr.Http/FlurlSpecificEventHandler.cs similarity index 90% rename from src/Recyclarr.ServarrApi/Http/FlurlSpecificEventHandler.cs rename to src/Recyclarr.Http/FlurlSpecificEventHandler.cs index b07ac24f..86ed6482 100644 --- a/src/Recyclarr.ServarrApi/Http/FlurlSpecificEventHandler.cs +++ b/src/Recyclarr.Http/FlurlSpecificEventHandler.cs @@ -1,7 +1,7 @@ using System.Diagnostics.CodeAnalysis; using Flurl.Http; -namespace Recyclarr.ServarrApi.Http; +namespace Recyclarr.Http; [SuppressMessage("Naming", "CA1711:Identifiers should not have incorrect suffix", Justification = "Naming convention borrowed from and determined by Flurl")] diff --git a/src/Recyclarr.Http/HttpAutofacModule.cs b/src/Recyclarr.Http/HttpAutofacModule.cs new file mode 100644 index 00000000..2a026d14 --- /dev/null +++ b/src/Recyclarr.Http/HttpAutofacModule.cs @@ -0,0 +1,21 @@ +using Autofac; +using Flurl.Http.Configuration; + +namespace Recyclarr.Http; + +public class HttpAutofacModule : Module +{ + protected override void Load(ContainerBuilder builder) + { + base.Load(builder); + builder.RegisterType() + .As() + .SingleInstance(); + + builder.RegisterTypes( + typeof(FlurlAfterCallLogRedactor), + typeof(FlurlBeforeCallLogRedactor), + typeof(FlurlRedirectPreventer)) + .As(); + } +} diff --git a/src/Recyclarr.Http/Recyclarr.Http.csproj b/src/Recyclarr.Http/Recyclarr.Http.csproj new file mode 100644 index 00000000..c113e7bf --- /dev/null +++ b/src/Recyclarr.Http/Recyclarr.Http.csproj @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/Recyclarr.ServarrApi/CustomFormat/CustomFormatApiService.cs b/src/Recyclarr.ServarrApi/CustomFormat/CustomFormatApiService.cs index 7db5681d..664f90ff 100644 --- a/src/Recyclarr.ServarrApi/CustomFormat/CustomFormatApiService.cs +++ b/src/Recyclarr.ServarrApi/CustomFormat/CustomFormatApiService.cs @@ -1,6 +1,5 @@ using Flurl.Http; using Recyclarr.Config.Models; -using Recyclarr.ServarrApi.Http.Servarr; using Recyclarr.TrashGuide.CustomFormat; namespace Recyclarr.ServarrApi.CustomFormat; diff --git a/src/Recyclarr.ServarrApi/Http/Servarr/IServarrRequestBuilder.cs b/src/Recyclarr.ServarrApi/IServarrRequestBuilder.cs similarity index 79% rename from src/Recyclarr.ServarrApi/Http/Servarr/IServarrRequestBuilder.cs rename to src/Recyclarr.ServarrApi/IServarrRequestBuilder.cs index 1a3d3f1b..2f99a984 100644 --- a/src/Recyclarr.ServarrApi/Http/Servarr/IServarrRequestBuilder.cs +++ b/src/Recyclarr.ServarrApi/IServarrRequestBuilder.cs @@ -1,7 +1,7 @@ using Flurl.Http; using Recyclarr.Config.Models; -namespace Recyclarr.ServarrApi.Http.Servarr; +namespace Recyclarr.ServarrApi; public interface IServarrRequestBuilder { diff --git a/src/Recyclarr.ServarrApi/MediaNaming/MediaNamingApiService.cs b/src/Recyclarr.ServarrApi/MediaNaming/MediaNamingApiService.cs index 3da9f603..a9736ff2 100644 --- a/src/Recyclarr.ServarrApi/MediaNaming/MediaNamingApiService.cs +++ b/src/Recyclarr.ServarrApi/MediaNaming/MediaNamingApiService.cs @@ -1,7 +1,6 @@ using Flurl.Http; using Recyclarr.Common; using Recyclarr.Config.Models; -using Recyclarr.ServarrApi.Http.Servarr; namespace Recyclarr.ServarrApi.MediaNaming; diff --git a/src/Recyclarr.ServarrApi/QualityDefinition/QualityDefinitionApiService.cs b/src/Recyclarr.ServarrApi/QualityDefinition/QualityDefinitionApiService.cs index 83c5ec96..f4dcfd3b 100644 --- a/src/Recyclarr.ServarrApi/QualityDefinition/QualityDefinitionApiService.cs +++ b/src/Recyclarr.ServarrApi/QualityDefinition/QualityDefinitionApiService.cs @@ -1,6 +1,5 @@ using Flurl.Http; using Recyclarr.Config.Models; -using Recyclarr.ServarrApi.Http.Servarr; namespace Recyclarr.ServarrApi.QualityDefinition; diff --git a/src/Recyclarr.ServarrApi/QualityProfile/QualityProfileApiService.cs b/src/Recyclarr.ServarrApi/QualityProfile/QualityProfileApiService.cs index d89ba3fe..873aa41f 100644 --- a/src/Recyclarr.ServarrApi/QualityProfile/QualityProfileApiService.cs +++ b/src/Recyclarr.ServarrApi/QualityProfile/QualityProfileApiService.cs @@ -1,6 +1,5 @@ using Flurl.Http; using Recyclarr.Config.Models; -using Recyclarr.ServarrApi.Http.Servarr; namespace Recyclarr.ServarrApi.QualityProfile; diff --git a/src/Recyclarr.ServarrApi/Recyclarr.ServarrApi.csproj b/src/Recyclarr.ServarrApi/Recyclarr.ServarrApi.csproj index 00af1d7d..4f0f434e 100644 --- a/src/Recyclarr.ServarrApi/Recyclarr.ServarrApi.csproj +++ b/src/Recyclarr.ServarrApi/Recyclarr.ServarrApi.csproj @@ -6,6 +6,7 @@ + diff --git a/src/Recyclarr.ServarrApi/ApiServicesAutofacModule.cs b/src/Recyclarr.ServarrApi/ServarrApiAutofacModule.cs similarity index 63% rename from src/Recyclarr.ServarrApi/ApiServicesAutofacModule.cs rename to src/Recyclarr.ServarrApi/ServarrApiAutofacModule.cs index 8a669c94..df9f0f0e 100644 --- a/src/Recyclarr.ServarrApi/ApiServicesAutofacModule.cs +++ b/src/Recyclarr.ServarrApi/ServarrApiAutofacModule.cs @@ -1,8 +1,5 @@ using Autofac; -using Flurl.Http.Configuration; using Recyclarr.ServarrApi.CustomFormat; -using Recyclarr.ServarrApi.Http; -using Recyclarr.ServarrApi.Http.Servarr; using Recyclarr.ServarrApi.MediaNaming; using Recyclarr.ServarrApi.QualityDefinition; using Recyclarr.ServarrApi.QualityProfile; @@ -10,26 +7,16 @@ using Recyclarr.ServarrApi.System; namespace Recyclarr.ServarrApi; -public class ApiServicesAutofacModule : Module +public class ServarrApiAutofacModule : Module { protected override void Load(ContainerBuilder builder) { base.Load(builder); - builder.RegisterType() - .As() - .SingleInstance(); - builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); - - builder.RegisterTypes( - typeof(FlurlAfterCallHandler), - typeof(FlurlBeforeCallHandler), - typeof(FlurlRedirectHandler)) - .As(); } } diff --git a/src/Recyclarr.ServarrApi/Http/Servarr/ServarrRequestBuilder.cs b/src/Recyclarr.ServarrApi/ServarrRequestBuilder.cs similarity index 97% rename from src/Recyclarr.ServarrApi/Http/Servarr/ServarrRequestBuilder.cs rename to src/Recyclarr.ServarrApi/ServarrRequestBuilder.cs index 62d5c20d..d8414bfe 100644 --- a/src/Recyclarr.ServarrApi/Http/Servarr/ServarrRequestBuilder.cs +++ b/src/Recyclarr.ServarrApi/ServarrRequestBuilder.cs @@ -3,11 +3,12 @@ using Flurl; using Flurl.Http; using Flurl.Http.Configuration; using Recyclarr.Config.Models; +using Recyclarr.Http; using Recyclarr.Json; using Recyclarr.Settings; using Serilog; -namespace Recyclarr.ServarrApi.Http.Servarr; +namespace Recyclarr.ServarrApi; public class ServarrRequestBuilder( ILogger log, diff --git a/src/Recyclarr.ServarrApi/System/SystemApiService.cs b/src/Recyclarr.ServarrApi/System/SystemApiService.cs index ad61cf33..cb8b990d 100644 --- a/src/Recyclarr.ServarrApi/System/SystemApiService.cs +++ b/src/Recyclarr.ServarrApi/System/SystemApiService.cs @@ -1,6 +1,5 @@ using Flurl.Http; using Recyclarr.Config.Models; -using Recyclarr.ServarrApi.Http.Servarr; namespace Recyclarr.ServarrApi.System; diff --git a/tests/Recyclarr.IntegrationTests/IntegrationTestFixture.cs b/tests/Recyclarr.IntegrationTests/IntegrationTestFixture.cs index 5559d307..4c769d1c 100644 --- a/tests/Recyclarr.IntegrationTests/IntegrationTestFixture.cs +++ b/tests/Recyclarr.IntegrationTests/IntegrationTestFixture.cs @@ -5,6 +5,7 @@ using Autofac.Features.ResolveAnything; using Recyclarr.Common; using Recyclarr.Compatibility; using Recyclarr.Config; +using Recyclarr.Http; using Recyclarr.Json; using Recyclarr.Platform; using Recyclarr.Repo; @@ -63,7 +64,8 @@ public abstract class IntegrationTestFixture : IDisposable builder.RegisterModule(); builder.RegisterModule(); builder.RegisterModule(); - builder.RegisterModule(); + builder.RegisterModule(); + builder.RegisterModule(); builder.RegisterModule(); builder.RegisterModule(); builder.RegisterModule();