diff --git a/code/Executable/Executable.csproj b/code/Cleanuparr.Api/Cleanuparr.Api.csproj
similarity index 64%
rename from code/Executable/Executable.csproj
rename to code/Cleanuparr.Api/Cleanuparr.Api.csproj
index 1b65fa70..7e8d5b78 100644
--- a/code/Executable/Executable.csproj
+++ b/code/Cleanuparr.Api/Cleanuparr.Api.csproj
@@ -2,41 +2,37 @@
cleanuparr
- net9.0
0.0.1
+ net9.0
enable
enable
- dotnet-Executable-6108b2ba-f035-47bc-addf-aaf5e20da4b8
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
diff --git a/code/Executable/Controllers/ApiDocumentationController.cs b/code/Cleanuparr.Api/Controllers/ApiDocumentationController.cs
similarity index 85%
rename from code/Executable/Controllers/ApiDocumentationController.cs
rename to code/Cleanuparr.Api/Controllers/ApiDocumentationController.cs
index e4e3fb97..65d5f64c 100644
--- a/code/Executable/Controllers/ApiDocumentationController.cs
+++ b/code/Cleanuparr.Api/Controllers/ApiDocumentationController.cs
@@ -1,6 +1,6 @@
using Microsoft.AspNetCore.Mvc;
-namespace Executable.Controllers;
+namespace Cleanuparr.Api.Controllers;
[ApiController]
[Route("")]
diff --git a/code/Executable/Controllers/ConfigurationController.cs b/code/Cleanuparr.Api/Controllers/ConfigurationController.cs
similarity index 97%
rename from code/Executable/Controllers/ConfigurationController.cs
rename to code/Cleanuparr.Api/Controllers/ConfigurationController.cs
index 24f0be6a..306427fe 100644
--- a/code/Executable/Controllers/ConfigurationController.cs
+++ b/code/Cleanuparr.Api/Controllers/ConfigurationController.cs
@@ -1,20 +1,21 @@
-using Common.Configuration;
-using Data.Models.Configuration.Arr;
-using Data.Models.Configuration.DownloadCleaner;
-using Data.Models.Configuration.General;
-using Data.Models.Configuration.QueueCleaner;
-using Data;
-using Data.Enums;
-using Infrastructure.Http.DynamicHttpClientSystem;
-using Infrastructure.Logging;
-using Infrastructure.Models;
+using Cleanuparr.Application.Features.Arr.Dtos;
+using Cleanuparr.Application.Features.DownloadClient.Dtos;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Http.DynamicHttpClientSystem;
+using Cleanuparr.Infrastructure.Logging;
+using Cleanuparr.Infrastructure.Models;
+using Cleanuparr.Persistence;
+using Cleanuparr.Persistence.Models.Configuration;
+using Cleanuparr.Persistence.Models.Configuration.Arr;
+using Cleanuparr.Persistence.Models.Configuration.DownloadCleaner;
+using Cleanuparr.Persistence.Models.Configuration.General;
+using Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
using Infrastructure.Services.Interfaces;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
-using Executable.DTOs;
-namespace Executable.Controllers;
+namespace Cleanuparr.Api.Controllers;
[ApiController]
[Route("api/[controller]")]
diff --git a/code/Executable/Controllers/EventsController.cs b/code/Cleanuparr.Api/Controllers/EventsController.cs
similarity index 97%
rename from code/Executable/Controllers/EventsController.cs
rename to code/Cleanuparr.Api/Controllers/EventsController.cs
index 02d7dc3e..6798d32f 100644
--- a/code/Executable/Controllers/EventsController.cs
+++ b/code/Cleanuparr.Api/Controllers/EventsController.cs
@@ -1,12 +1,11 @@
-using Data;
-using Data.Models.Events;
-using Data.Enums;
-using Infrastructure.Events;
+using System.Text.Json.Serialization;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Persistence;
+using Cleanuparr.Persistence.Models.Events;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
-using System.Text.Json.Serialization;
-namespace Executable.Controllers;
+namespace Cleanuparr.Api.Controllers;
[ApiController]
[Route("api/[controller]")]
diff --git a/code/Executable/Controllers/HealthCheckController.cs b/code/Cleanuparr.Api/Controllers/HealthCheckController.cs
similarity index 97%
rename from code/Executable/Controllers/HealthCheckController.cs
rename to code/Cleanuparr.Api/Controllers/HealthCheckController.cs
index caf7f47c..5766c1c7 100644
--- a/code/Executable/Controllers/HealthCheckController.cs
+++ b/code/Cleanuparr.Api/Controllers/HealthCheckController.cs
@@ -1,7 +1,7 @@
-using Infrastructure.Health;
+using Cleanuparr.Infrastructure.Health;
using Microsoft.AspNetCore.Mvc;
-namespace Executable.Controllers;
+namespace Cleanuparr.Api.Controllers;
///
/// Controller for checking the health of download clients
diff --git a/code/Executable/Controllers/JobsController.cs b/code/Cleanuparr.Api/Controllers/JobsController.cs
similarity index 97%
rename from code/Executable/Controllers/JobsController.cs
rename to code/Cleanuparr.Api/Controllers/JobsController.cs
index 6b451ccf..a509f2cd 100644
--- a/code/Executable/Controllers/JobsController.cs
+++ b/code/Cleanuparr.Api/Controllers/JobsController.cs
@@ -1,10 +1,9 @@
-using Executable.Models;
-using Infrastructure.Models;
+using Cleanuparr.Api.Models;
+using Cleanuparr.Infrastructure.Models;
using Infrastructure.Services.Interfaces;
-using Infrastructure.Utilities;
using Microsoft.AspNetCore.Mvc;
-namespace Executable.Controllers;
+namespace Cleanuparr.Api.Controllers;
[ApiController]
[Route("api/[controller]")]
diff --git a/code/Executable/Controllers/StatusController.cs b/code/Cleanuparr.Api/Controllers/StatusController.cs
similarity index 97%
rename from code/Executable/Controllers/StatusController.cs
rename to code/Cleanuparr.Api/Controllers/StatusController.cs
index 25b41e7b..9661d424 100644
--- a/code/Executable/Controllers/StatusController.cs
+++ b/code/Cleanuparr.Api/Controllers/StatusController.cs
@@ -1,12 +1,12 @@
-using Infrastructure.Verticals.Arr;
-using Infrastructure.Verticals.DownloadClient;
-using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
-using Data;
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Features.Arr;
+using Cleanuparr.Infrastructure.Features.DownloadClient;
+using Cleanuparr.Persistence;
+using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
-namespace Executable.Controllers;
+namespace Cleanuparr.Api.Controllers;
[ApiController]
[Route("api/[controller]")]
diff --git a/code/Executable/DependencyInjection/ApiDI.cs b/code/Cleanuparr.Api/DependencyInjection/ApiDI.cs
similarity index 93%
rename from code/Executable/DependencyInjection/ApiDI.cs
rename to code/Cleanuparr.Api/DependencyInjection/ApiDI.cs
index 9d3a23f6..3fbd15a7 100644
--- a/code/Executable/DependencyInjection/ApiDI.cs
+++ b/code/Cleanuparr.Api/DependencyInjection/ApiDI.cs
@@ -1,12 +1,12 @@
using System.Text.Json.Serialization;
-using Infrastructure.Health;
-using Infrastructure.Logging;
-using Executable.Middleware;
-using Infrastructure.Hubs;
+using Cleanuparr.Api.Middleware;
+using Cleanuparr.Infrastructure.Health;
+using Cleanuparr.Infrastructure.Hubs;
+using Cleanuparr.Infrastructure.Logging;
using Microsoft.AspNetCore.Http.Json;
using Microsoft.OpenApi.Models;
-namespace Executable.DependencyInjection;
+namespace Cleanuparr.Api.DependencyInjection;
public static class ApiDI
{
diff --git a/code/Executable/DependencyInjection/LoggingDI.cs b/code/Cleanuparr.Api/DependencyInjection/LoggingDI.cs
similarity index 92%
rename from code/Executable/DependencyInjection/LoggingDI.cs
rename to code/Cleanuparr.Api/DependencyInjection/LoggingDI.cs
index db31446b..bb33ecde 100644
--- a/code/Executable/DependencyInjection/LoggingDI.cs
+++ b/code/Cleanuparr.Api/DependencyInjection/LoggingDI.cs
@@ -1,13 +1,12 @@
-using Common.Helpers;
-using Data.Enums;
-using Infrastructure.Verticals.DownloadCleaner;
-using Infrastructure.Verticals.QueueCleaner;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Models;
+using Cleanuparr.Shared.Helpers;
using Serilog;
using Serilog.Events;
using Serilog.Templates;
using Serilog.Templates.Themes;
-namespace Executable.DependencyInjection;
+namespace Cleanuparr.Api.DependencyInjection;
public static class LoggingDI
{
@@ -28,7 +27,7 @@ public static class LoggingDI
const string fileOutputTemplate = $"{{@t:yyyy-MM-dd HH:mm:ss.fff zzz}} [{{@l:u3}}]{jobNameTemplate}{categoryTemplate} {{@m:lj}}\n{{@x}}";
// Determine job name padding
- List jobNames = [nameof(QueueCleaner), nameof(DownloadCleaner)];
+ List jobNames = [nameof(JobType.QueueCleaner), nameof(JobType.DownloadCleaner)];
int jobPadding = jobNames.Max(x => x.Length) + 2;
// Determine instance name padding
diff --git a/code/Executable/DependencyInjection/MainDI.cs b/code/Cleanuparr.Api/DependencyInjection/MainDI.cs
similarity index 88%
rename from code/Executable/DependencyInjection/MainDI.cs
rename to code/Cleanuparr.Api/DependencyInjection/MainDI.cs
index 467a88f9..f9f9d838 100644
--- a/code/Executable/DependencyInjection/MainDI.cs
+++ b/code/Cleanuparr.Api/DependencyInjection/MainDI.cs
@@ -1,21 +1,14 @@
-using System.Net;
using System.Text.Json.Serialization;
-using Data.Models.Configuration.General;
+using Cleanuparr.Infrastructure.Features.DownloadRemover.Consumers;
+using Cleanuparr.Infrastructure.Features.Notifications.Consumers;
+using Cleanuparr.Infrastructure.Health;
+using Cleanuparr.Infrastructure.Http;
+using Cleanuparr.Infrastructure.Http.DynamicHttpClientSystem;
using Data.Models.Arr;
-using Infrastructure.Health;
-using Infrastructure.Http;
-using Infrastructure.Http.DynamicHttpClientSystem;
-using Infrastructure.Verticals.DownloadClient.Deluge;
-using Infrastructure.Verticals.DownloadClient.QBittorrent;
-using Infrastructure.Verticals.DownloadClient.Transmission;
-using Infrastructure.Verticals.DownloadRemover.Consumers;
-using Infrastructure.Verticals.Notifications.Consumers;
using Infrastructure.Verticals.Notifications.Models;
using MassTransit;
-using Polly;
-using Polly.Extensions.Http;
-namespace Executable.DependencyInjection;
+namespace Cleanuparr.Api.DependencyInjection;
public static class MainDI
{
diff --git a/code/Executable/DependencyInjection/NotificationsDI.cs b/code/Cleanuparr.Api/DependencyInjection/NotificationsDI.cs
similarity index 76%
rename from code/Executable/DependencyInjection/NotificationsDI.cs
rename to code/Cleanuparr.Api/DependencyInjection/NotificationsDI.cs
index 63cce8fb..7e31baa4 100644
--- a/code/Executable/DependencyInjection/NotificationsDI.cs
+++ b/code/Cleanuparr.Api/DependencyInjection/NotificationsDI.cs
@@ -1,8 +1,9 @@
+using Cleanuparr.Infrastructure.Features.Notifications;
+using Cleanuparr.Infrastructure.Features.Notifications.Apprise;
+using Cleanuparr.Infrastructure.Features.Notifications.Notifiarr;
using Infrastructure.Verticals.Notifications;
-using Infrastructure.Verticals.Notifications.Apprise;
-using Infrastructure.Verticals.Notifications.Notifiarr;
-namespace Executable.DependencyInjection;
+namespace Cleanuparr.Api.DependencyInjection;
public static class NotificationsDI
{
diff --git a/code/Executable/DependencyInjection/QuartzDI.cs b/code/Cleanuparr.Api/DependencyInjection/QuartzDI.cs
similarity index 88%
rename from code/Executable/DependencyInjection/QuartzDI.cs
rename to code/Cleanuparr.Api/DependencyInjection/QuartzDI.cs
index b586f592..9ca80273 100644
--- a/code/Executable/DependencyInjection/QuartzDI.cs
+++ b/code/Cleanuparr.Api/DependencyInjection/QuartzDI.cs
@@ -1,7 +1,7 @@
-using Executable.Jobs;
+using Cleanuparr.Api.Jobs;
using Quartz;
-namespace Executable.DependencyInjection;
+namespace Cleanuparr.Api.DependencyInjection;
public static class QuartzDI
{
diff --git a/code/Executable/DependencyInjection/ServicesDI.cs b/code/Cleanuparr.Api/DependencyInjection/ServicesDI.cs
similarity index 63%
rename from code/Executable/DependencyInjection/ServicesDI.cs
rename to code/Cleanuparr.Api/DependencyInjection/ServicesDI.cs
index 50f8f1d6..e415de0e 100644
--- a/code/Executable/DependencyInjection/ServicesDI.cs
+++ b/code/Cleanuparr.Api/DependencyInjection/ServicesDI.cs
@@ -1,24 +1,22 @@
-using Common.Helpers;
-using Data;
-using Infrastructure.Events;
+using Cleanuparr.Application.Features.DownloadCleaner;
+using Cleanuparr.Application.Features.QueueCleaner;
+using Cleanuparr.Infrastructure.Events;
+using Cleanuparr.Infrastructure.Features.Arr;
+using Cleanuparr.Infrastructure.Features.ContentBlocker;
+using Cleanuparr.Infrastructure.Features.DownloadClient;
+using Cleanuparr.Infrastructure.Features.DownloadRemover;
+using Cleanuparr.Infrastructure.Features.DownloadRemover.Interfaces;
+using Cleanuparr.Infrastructure.Features.Files;
+using Cleanuparr.Infrastructure.Features.ItemStriker;
+using Cleanuparr.Infrastructure.Features.Security;
+using Cleanuparr.Infrastructure.Interceptors;
+using Cleanuparr.Infrastructure.Services;
+using Cleanuparr.Persistence;
using Infrastructure.Interceptors;
-using Infrastructure.Services;
using Infrastructure.Services.Interfaces;
-using Infrastructure.Verticals.Arr;
-using Infrastructure.Verticals.ContentBlocker;
-using Infrastructure.Verticals.DownloadCleaner;
-using Infrastructure.Verticals.DownloadClient;
-using Infrastructure.Verticals.DownloadClient.Deluge;
-using Infrastructure.Verticals.DownloadClient.QBittorrent;
-using Infrastructure.Verticals.DownloadClient.Transmission;
-using Infrastructure.Verticals.DownloadRemover;
-using Infrastructure.Verticals.DownloadRemover.Interfaces;
using Infrastructure.Verticals.Files;
-using Infrastructure.Verticals.ItemStriker;
-using Infrastructure.Verticals.QueueCleaner;
-using Infrastructure.Verticals.Security;
-namespace Executable.DependencyInjection;
+namespace Cleanuparr.Api.DependencyInjection;
public static class ServicesDI
{
@@ -39,8 +37,8 @@ public static class ServicesDI
.AddTransient()
.AddTransient()
.AddTransient()
- .AddTransient()
- .AddTransient()
+ .AddTransient()
+ .AddTransient()
.AddTransient()
.AddTransient()
.AddTransient()
diff --git a/code/Executable/HostExtensions.cs b/code/Cleanuparr.Api/HostExtensions.cs
similarity index 95%
rename from code/Executable/HostExtensions.cs
rename to code/Cleanuparr.Api/HostExtensions.cs
index 4b860436..c141fbb6 100644
--- a/code/Executable/HostExtensions.cs
+++ b/code/Cleanuparr.Api/HostExtensions.cs
@@ -1,8 +1,8 @@
using System.Reflection;
-using Data;
+using Cleanuparr.Persistence;
using Microsoft.EntityFrameworkCore;
-namespace Executable;
+namespace Cleanuparr.Api;
public static class HostExtensions
{
diff --git a/code/Executable/Jobs/BackgroundJobManager.cs b/code/Cleanuparr.Api/Jobs/BackgroundJobManager.cs
similarity index 92%
rename from code/Executable/Jobs/BackgroundJobManager.cs
rename to code/Cleanuparr.Api/Jobs/BackgroundJobManager.cs
index 6f41da8e..4bfea4e5 100644
--- a/code/Executable/Jobs/BackgroundJobManager.cs
+++ b/code/Cleanuparr.Api/Jobs/BackgroundJobManager.cs
@@ -1,17 +1,17 @@
-using Common.Configuration;
-using Data.Models.Configuration.DownloadCleaner;
-using Data.Models.Configuration.QueueCleaner;
-using Common.Exceptions;
-using Common.Helpers;
-using Data;
-using Infrastructure.Verticals.DownloadCleaner;
-using Infrastructure.Verticals.Jobs;
-using Infrastructure.Verticals.QueueCleaner;
+using Cleanuparr.Application.Features.DownloadCleaner;
+using Cleanuparr.Application.Features.QueueCleaner;
+using Cleanuparr.Domain.Exceptions;
+using Cleanuparr.Infrastructure.Features.Jobs;
+using Cleanuparr.Persistence;
+using Cleanuparr.Persistence.Models.Configuration;
+using Cleanuparr.Persistence.Models.Configuration.DownloadCleaner;
+using Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
+using Cleanuparr.Shared.Helpers;
using Microsoft.EntityFrameworkCore;
using Quartz;
using Quartz.Spi;
-namespace Executable.Jobs;
+namespace Cleanuparr.Api.Jobs;
///
/// Manages background jobs in the application.
@@ -100,7 +100,7 @@ public class BackgroundJobManager : IHostedService
return;
}
- await AddJobWithTrigger(
+ await AddJobWithTrigger(
config,
config.CronExpression,
cancellationToken);
@@ -116,7 +116,7 @@ public class BackgroundJobManager : IHostedService
return;
}
- await AddJobWithTrigger(
+ await AddJobWithTrigger(
config,
config.CronExpression,
cancellationToken);
diff --git a/code/Executable/Jobs/GenericJob.cs b/code/Cleanuparr.Api/Jobs/GenericJob.cs
similarity index 89%
rename from code/Executable/Jobs/GenericJob.cs
rename to code/Cleanuparr.Api/Jobs/GenericJob.cs
index 12181fe6..5b30d0be 100644
--- a/code/Executable/Jobs/GenericJob.cs
+++ b/code/Cleanuparr.Api/Jobs/GenericJob.cs
@@ -1,8 +1,8 @@
-using Infrastructure.Verticals.Jobs;
+using Cleanuparr.Infrastructure.Features.Jobs;
using Quartz;
using Serilog.Context;
-namespace Executable.Jobs;
+namespace Cleanuparr.Api.Jobs;
[DisallowConcurrentExecution]
public sealed class GenericJob : IJob
diff --git a/code/Executable/Middleware/ExceptionMiddleware.cs b/code/Cleanuparr.Api/Middleware/ExceptionMiddleware.cs
similarity index 95%
rename from code/Executable/Middleware/ExceptionMiddleware.cs
rename to code/Cleanuparr.Api/Middleware/ExceptionMiddleware.cs
index e3fff648..1867176c 100644
--- a/code/Executable/Middleware/ExceptionMiddleware.cs
+++ b/code/Cleanuparr.Api/Middleware/ExceptionMiddleware.cs
@@ -1,9 +1,9 @@
using System.Net;
using System.Text.Json;
-using Common.Exceptions;
-using Executable.Models;
+using Cleanuparr.Api.Models;
+using Cleanuparr.Domain.Exceptions;
-namespace Executable.Middleware;
+namespace Cleanuparr.Api.Middleware;
public class ExceptionMiddleware
{
diff --git a/code/Executable/Models/ErrorResponse.cs b/code/Cleanuparr.Api/Models/ErrorResponse.cs
similarity index 91%
rename from code/Executable/Models/ErrorResponse.cs
rename to code/Cleanuparr.Api/Models/ErrorResponse.cs
index f02beff7..5fafaf0d 100644
--- a/code/Executable/Models/ErrorResponse.cs
+++ b/code/Cleanuparr.Api/Models/ErrorResponse.cs
@@ -1,4 +1,4 @@
-namespace Executable.Models;
+namespace Cleanuparr.Api.Models;
///
/// Standardized error response model for API endpoints
diff --git a/code/Executable/Models/ScheduleRequest.cs b/code/Cleanuparr.Api/Models/ScheduleRequest.cs
similarity index 76%
rename from code/Executable/Models/ScheduleRequest.cs
rename to code/Cleanuparr.Api/Models/ScheduleRequest.cs
index 2304a1b5..b8980ab6 100644
--- a/code/Executable/Models/ScheduleRequest.cs
+++ b/code/Cleanuparr.Api/Models/ScheduleRequest.cs
@@ -1,6 +1,6 @@
-namespace Executable.Models;
+using Cleanuparr.Infrastructure.Models;
-using Infrastructure.Models;
+namespace Cleanuparr.Api.Models;
///
/// Represents a request to schedule a job
diff --git a/code/Executable/Program.cs b/code/Cleanuparr.Api/Program.cs
similarity index 90%
rename from code/Executable/Program.cs
rename to code/Cleanuparr.Api/Program.cs
index 0546acfd..70475344 100644
--- a/code/Executable/Program.cs
+++ b/code/Cleanuparr.Api/Program.cs
@@ -1,8 +1,10 @@
-using Executable;
-using Executable.DependencyInjection;
-using Infrastructure.Logging;
-using Serilog;
+// using Infrastructure.Logging;
+// using Serilog;
using System.Text.Json.Serialization;
+using Cleanuparr.Api;
+using Cleanuparr.Api.DependencyInjection;
+using Cleanuparr.Infrastructure.Logging;
+using Serilog;
var builder = WebApplication.CreateBuilder(args);
diff --git a/code/Cleanuparr.Application/Cleanuparr.Application.csproj b/code/Cleanuparr.Application/Cleanuparr.Application.csproj
new file mode 100644
index 00000000..cef966f0
--- /dev/null
+++ b/code/Cleanuparr.Application/Cleanuparr.Application.csproj
@@ -0,0 +1,20 @@
+
+
+
+ net9.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/Executable/DTOs/ArrConfigDto.cs b/code/Cleanuparr.Application/Features/Arr/Dtos/ArrConfigDto.cs
similarity index 76%
rename from code/Executable/DTOs/ArrConfigDto.cs
rename to code/Cleanuparr.Application/Features/Arr/Dtos/ArrConfigDto.cs
index 9a79bd32..fe792dcb 100644
--- a/code/Executable/DTOs/ArrConfigDto.cs
+++ b/code/Cleanuparr.Application/Features/Arr/Dtos/ArrConfigDto.cs
@@ -1,6 +1,6 @@
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
-namespace Executable.DTOs;
+namespace Cleanuparr.Application.Features.Arr.Dtos;
public class ArrConfigDto
{
diff --git a/code/Executable/DTOs/CreateArrInstanceDto.cs b/code/Cleanuparr.Application/Features/Arr/Dtos/CreateArrInstanceDto.cs
similarity index 87%
rename from code/Executable/DTOs/CreateArrInstanceDto.cs
rename to code/Cleanuparr.Application/Features/Arr/Dtos/CreateArrInstanceDto.cs
index 0834e679..c0ca0e02 100644
--- a/code/Executable/DTOs/CreateArrInstanceDto.cs
+++ b/code/Cleanuparr.Application/Features/Arr/Dtos/CreateArrInstanceDto.cs
@@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations;
-namespace Executable.DTOs;
+namespace Cleanuparr.Application.Features.Arr.Dtos;
///
/// DTO for creating new Arr instances without requiring an ID
diff --git a/code/Executable/DTOs/UpdateLidarrConfigDto.cs b/code/Cleanuparr.Application/Features/Arr/Dtos/UpdateLidarrConfigDto.cs
similarity index 82%
rename from code/Executable/DTOs/UpdateLidarrConfigDto.cs
rename to code/Cleanuparr.Application/Features/Arr/Dtos/UpdateLidarrConfigDto.cs
index b11552f7..2d3006ba 100644
--- a/code/Executable/DTOs/UpdateLidarrConfigDto.cs
+++ b/code/Cleanuparr.Application/Features/Arr/Dtos/UpdateLidarrConfigDto.cs
@@ -1,4 +1,4 @@
-namespace Executable.DTOs;
+namespace Cleanuparr.Application.Features.Arr.Dtos;
///
/// DTO for updating Lidarr configuration basic settings (instances managed separately)
diff --git a/code/Executable/DTOs/UpdateRadarrConfigDto.cs b/code/Cleanuparr.Application/Features/Arr/Dtos/UpdateRadarrConfigDto.cs
similarity index 82%
rename from code/Executable/DTOs/UpdateRadarrConfigDto.cs
rename to code/Cleanuparr.Application/Features/Arr/Dtos/UpdateRadarrConfigDto.cs
index 26283c6e..e12d09cd 100644
--- a/code/Executable/DTOs/UpdateRadarrConfigDto.cs
+++ b/code/Cleanuparr.Application/Features/Arr/Dtos/UpdateRadarrConfigDto.cs
@@ -1,4 +1,4 @@
-namespace Executable.DTOs;
+namespace Cleanuparr.Application.Features.Arr.Dtos;
///
/// DTO for updating Radarr configuration basic settings (instances managed separately)
diff --git a/code/Executable/DTOs/UpdateSonarrConfigDto.cs b/code/Cleanuparr.Application/Features/Arr/Dtos/UpdateSonarrConfigDto.cs
similarity index 92%
rename from code/Executable/DTOs/UpdateSonarrConfigDto.cs
rename to code/Cleanuparr.Application/Features/Arr/Dtos/UpdateSonarrConfigDto.cs
index 4148fbc0..770d455b 100644
--- a/code/Executable/DTOs/UpdateSonarrConfigDto.cs
+++ b/code/Cleanuparr.Application/Features/Arr/Dtos/UpdateSonarrConfigDto.cs
@@ -1,7 +1,6 @@
using System.ComponentModel.DataAnnotations;
-using Data.Models.Configuration.Arr;
-namespace Executable.DTOs;
+namespace Cleanuparr.Application.Features.Arr.Dtos;
///
/// DTO for updating Sonarr configuration basic settings (instances managed separately)
diff --git a/code/Infrastructure/Verticals/DownloadCleaner/DownloadCleaner.cs b/code/Cleanuparr.Application/Features/DownloadCleaner/DownloadCleanerHandler.cs
similarity index 90%
rename from code/Infrastructure/Verticals/DownloadCleaner/DownloadCleaner.cs
rename to code/Cleanuparr.Application/Features/DownloadCleaner/DownloadCleanerHandler.cs
index ffc2fb9e..8ad7284f 100644
--- a/code/Infrastructure/Verticals/DownloadCleaner/DownloadCleaner.cs
+++ b/code/Cleanuparr.Application/Features/DownloadCleaner/DownloadCleanerHandler.cs
@@ -1,30 +1,29 @@
-using Data.Models.Configuration.Arr;
-using Data.Models.Configuration.DownloadCleaner;
-using Data.Models.Configuration.General;
-using Data;
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Events;
+using Cleanuparr.Infrastructure.Features.Arr;
+using Cleanuparr.Infrastructure.Features.Arr.Interfaces;
+using Cleanuparr.Infrastructure.Features.Context;
+using Cleanuparr.Infrastructure.Features.DownloadClient;
+using Cleanuparr.Infrastructure.Features.Jobs;
+using Cleanuparr.Infrastructure.Helpers;
+using Cleanuparr.Persistence;
+using Cleanuparr.Persistence.Models.Configuration.Arr;
+using Cleanuparr.Persistence.Models.Configuration.DownloadCleaner;
+using Cleanuparr.Persistence.Models.Configuration.General;
using Data.Models.Arr.Queue;
-using Data.Models.Configuration.Arr;
-using Infrastructure.Events;
-using Infrastructure.Helpers;
-using Infrastructure.Verticals.Arr;
-using Infrastructure.Verticals.Arr.Interfaces;
-using Infrastructure.Verticals.Context;
-using Infrastructure.Verticals.DownloadClient;
-using Infrastructure.Verticals.Jobs;
using MassTransit;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
using LogContext = Serilog.Context.LogContext;
-namespace Infrastructure.Verticals.DownloadCleaner;
+namespace Cleanuparr.Application.Features.DownloadCleaner;
-public sealed class DownloadCleaner : GenericHandler
+public sealed class DownloadCleanerHandler : GenericHandler
{
private readonly HashSet _excludedHashes = [];
- public DownloadCleaner(
- ILogger logger,
+ public DownloadCleanerHandler(
+ ILogger logger,
DataContext dataContext,
IMemoryCache cache,
IBus messageBus,
@@ -56,7 +55,7 @@ public sealed class DownloadCleaner : GenericHandler
if (!isUnlinkedEnabled && !isCleaningEnabled)
{
- _logger.LogWarning("{name} is not configured properly", nameof(DownloadCleaner));
+ _logger.LogWarning("{name} is not configured properly", nameof(DownloadCleanerHandler));
return;
}
diff --git a/code/Executable/DTOs/CreateDownloadClientDto.cs b/code/Cleanuparr.Application/Features/DownloadClient/Dtos/CreateDownloadClientDto.cs
similarity index 92%
rename from code/Executable/DTOs/CreateDownloadClientDto.cs
rename to code/Cleanuparr.Application/Features/DownloadClient/Dtos/CreateDownloadClientDto.cs
index f5c97e73..9b1aa6c2 100644
--- a/code/Executable/DTOs/CreateDownloadClientDto.cs
+++ b/code/Cleanuparr.Application/Features/DownloadClient/Dtos/CreateDownloadClientDto.cs
@@ -1,7 +1,7 @@
-using Common.Enums;
-using Common.Exceptions;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Domain.Exceptions;
-namespace Executable.DTOs;
+namespace Cleanuparr.Application.Features.DownloadClient.Dtos;
///
/// DTO for creating a new download client (without ID)
diff --git a/code/Infrastructure/Verticals/QueueCleaner/QueueCleaner.cs b/code/Cleanuparr.Application/Features/QueueCleaner/QueueCleanerHandler.cs
similarity index 90%
rename from code/Infrastructure/Verticals/QueueCleaner/QueueCleaner.cs
rename to code/Cleanuparr.Application/Features/QueueCleaner/QueueCleanerHandler.cs
index b2e21836..065f4f11 100644
--- a/code/Infrastructure/Verticals/QueueCleaner/QueueCleaner.cs
+++ b/code/Cleanuparr.Application/Features/QueueCleaner/QueueCleanerHandler.cs
@@ -1,32 +1,31 @@
-using Common.Configuration;
-using Data.Models.Configuration.Arr;
-using Data.Models.Configuration.General;
-using Data.Models.Configuration.QueueCleaner;
-using Common.Enums;
-using Data;
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Events;
+using Cleanuparr.Infrastructure.Features.Arr;
+using Cleanuparr.Infrastructure.Features.Arr.Interfaces;
+using Cleanuparr.Infrastructure.Features.ContentBlocker;
+using Cleanuparr.Infrastructure.Features.Context;
+using Cleanuparr.Infrastructure.Features.DownloadClient;
+using Cleanuparr.Infrastructure.Features.Jobs;
+using Cleanuparr.Infrastructure.Helpers;
+using Cleanuparr.Persistence;
+using Cleanuparr.Persistence.Models.Configuration;
+using Cleanuparr.Persistence.Models.Configuration.Arr;
+using Cleanuparr.Persistence.Models.Configuration.General;
+using Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
using Data.Models.Arr.Queue;
-using Infrastructure.Events;
-using Infrastructure.Helpers;
-using Infrastructure.Verticals.Arr;
-using Infrastructure.Verticals.Arr.Interfaces;
-using Infrastructure.Verticals.Context;
-using Infrastructure.Verticals.DownloadClient;
-using Infrastructure.Verticals.Jobs;
using MassTransit;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
using LogContext = Serilog.Context.LogContext;
-using Infrastructure.Verticals.ContentBlocker;
-namespace Infrastructure.Verticals.QueueCleaner;
+namespace Cleanuparr.Application.Features.QueueCleaner;
-public sealed class QueueCleaner : GenericHandler
+public sealed class QueueCleanerHandler : GenericHandler
{
private readonly BlocklistProvider _blocklistProvider;
- public QueueCleaner(
- ILogger logger,
+ public QueueCleanerHandler(
+ ILogger logger,
DataContext dataContext,
IMemoryCache cache,
IBus messageBus,
diff --git a/code/Common/Common.csproj b/code/Cleanuparr.Domain/Cleanuparr.Domain.csproj
similarity index 59%
rename from code/Common/Common.csproj
rename to code/Cleanuparr.Domain/Cleanuparr.Domain.csproj
index aaccf3fe..f6480a58 100644
--- a/code/Common/Common.csproj
+++ b/code/Cleanuparr.Domain/Cleanuparr.Domain.csproj
@@ -7,10 +7,7 @@
-
-
-
diff --git a/code/Data/Models/Arr/Queue/Image.cs b/code/Cleanuparr.Domain/Entities/Arr/Queue/Image.cs
similarity index 100%
rename from code/Data/Models/Arr/Queue/Image.cs
rename to code/Cleanuparr.Domain/Entities/Arr/Queue/Image.cs
diff --git a/code/Data/Models/Arr/Queue/LidarrImage.cs b/code/Cleanuparr.Domain/Entities/Arr/Queue/LidarrImage.cs
similarity index 100%
rename from code/Data/Models/Arr/Queue/LidarrImage.cs
rename to code/Cleanuparr.Domain/Entities/Arr/Queue/LidarrImage.cs
diff --git a/code/Data/Models/Arr/Queue/QueueAlbum.cs b/code/Cleanuparr.Domain/Entities/Arr/Queue/QueueAlbum.cs
similarity index 100%
rename from code/Data/Models/Arr/Queue/QueueAlbum.cs
rename to code/Cleanuparr.Domain/Entities/Arr/Queue/QueueAlbum.cs
diff --git a/code/Data/Models/Arr/Queue/QueueListResponse.cs b/code/Cleanuparr.Domain/Entities/Arr/Queue/QueueListResponse.cs
similarity index 100%
rename from code/Data/Models/Arr/Queue/QueueListResponse.cs
rename to code/Cleanuparr.Domain/Entities/Arr/Queue/QueueListResponse.cs
diff --git a/code/Data/Models/Arr/Queue/QueueMovie.cs b/code/Cleanuparr.Domain/Entities/Arr/Queue/QueueMovie.cs
similarity index 100%
rename from code/Data/Models/Arr/Queue/QueueMovie.cs
rename to code/Cleanuparr.Domain/Entities/Arr/Queue/QueueMovie.cs
diff --git a/code/Data/Models/Arr/Queue/QueueRecord.cs b/code/Cleanuparr.Domain/Entities/Arr/Queue/QueueRecord.cs
similarity index 100%
rename from code/Data/Models/Arr/Queue/QueueRecord.cs
rename to code/Cleanuparr.Domain/Entities/Arr/Queue/QueueRecord.cs
diff --git a/code/Data/Models/Arr/Queue/QueueSeries.cs b/code/Cleanuparr.Domain/Entities/Arr/Queue/QueueSeries.cs
similarity index 100%
rename from code/Data/Models/Arr/Queue/QueueSeries.cs
rename to code/Cleanuparr.Domain/Entities/Arr/Queue/QueueSeries.cs
diff --git a/code/Data/Models/Arr/Queue/TrackedDownloadStatusMessage.cs b/code/Cleanuparr.Domain/Entities/Arr/Queue/TrackedDownloadStatusMessage.cs
similarity index 100%
rename from code/Data/Models/Arr/Queue/TrackedDownloadStatusMessage.cs
rename to code/Cleanuparr.Domain/Entities/Arr/Queue/TrackedDownloadStatusMessage.cs
diff --git a/code/Data/Models/Arr/SearchItem.cs b/code/Cleanuparr.Domain/Entities/Arr/SearchItem.cs
similarity index 100%
rename from code/Data/Models/Arr/SearchItem.cs
rename to code/Cleanuparr.Domain/Entities/Arr/SearchItem.cs
diff --git a/code/Data/Models/Arr/SonarrSearchItem.cs b/code/Cleanuparr.Domain/Entities/Arr/SonarrSearchItem.cs
similarity index 92%
rename from code/Data/Models/Arr/SonarrSearchItem.cs
rename to code/Cleanuparr.Domain/Entities/Arr/SonarrSearchItem.cs
index 08c2b0f4..3271b6fb 100644
--- a/code/Data/Models/Arr/SonarrSearchItem.cs
+++ b/code/Cleanuparr.Domain/Entities/Arr/SonarrSearchItem.cs
@@ -1,4 +1,4 @@
-using Data.Models.Configuration.Arr;
+using Cleanuparr.Domain.Enums;
namespace Data.Models.Arr;
diff --git a/code/Common/CustomDataTypes/ByteSize.cs b/code/Cleanuparr.Domain/Entities/ByteSize.cs
similarity index 99%
rename from code/Common/CustomDataTypes/ByteSize.cs
rename to code/Cleanuparr.Domain/Entities/ByteSize.cs
index 72511242..6ee20acf 100644
--- a/code/Common/CustomDataTypes/ByteSize.cs
+++ b/code/Cleanuparr.Domain/Entities/ByteSize.cs
@@ -1,6 +1,6 @@
using System.Globalization;
-namespace Common.CustomDataTypes;
+namespace Cleanuparr.Domain.Entities;
public readonly struct ByteSize : IComparable, IEquatable
{
diff --git a/code/Data/Models/Cache/StalledCacheItem.cs b/code/Cleanuparr.Domain/Entities/Cache/StalledCacheItem.cs
similarity index 78%
rename from code/Data/Models/Cache/StalledCacheItem.cs
rename to code/Cleanuparr.Domain/Entities/Cache/StalledCacheItem.cs
index 9cc85d9d..e455d794 100644
--- a/code/Data/Models/Cache/StalledCacheItem.cs
+++ b/code/Cleanuparr.Domain/Entities/Cache/StalledCacheItem.cs
@@ -1,4 +1,4 @@
-namespace Data.Models.Cache;
+namespace Cleanuparr.Domain.Entities.Cache;
public sealed record StalledCacheItem
{
diff --git a/code/Data/Models/Deluge/Request/DelugeRequest.cs b/code/Cleanuparr.Domain/Entities/Deluge/Request/DelugeRequest.cs
similarity index 92%
rename from code/Data/Models/Deluge/Request/DelugeRequest.cs
rename to code/Cleanuparr.Domain/Entities/Deluge/Request/DelugeRequest.cs
index 7ab05ada..8f9047fe 100644
--- a/code/Data/Models/Deluge/Request/DelugeRequest.cs
+++ b/code/Cleanuparr.Domain/Entities/Deluge/Request/DelugeRequest.cs
@@ -1,6 +1,6 @@
using Newtonsoft.Json;
-namespace Data.Models.Deluge.Request;
+namespace Cleanuparr.Domain.Entities.Deluge.Request;
public class DelugeRequest
{
diff --git a/code/Data/Models/Deluge/Response/DelugeContents.cs b/code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeContents.cs
similarity index 84%
rename from code/Data/Models/Deluge/Response/DelugeContents.cs
rename to code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeContents.cs
index c597dfd1..29e62c1c 100644
--- a/code/Data/Models/Deluge/Response/DelugeContents.cs
+++ b/code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeContents.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace Data.Models.Deluge.Response;
+namespace Cleanuparr.Domain.Entities.Deluge.Response;
public sealed record DelugeContents
{
diff --git a/code/Data/Models/Deluge/Response/DelugeError.cs b/code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeError.cs
similarity index 80%
rename from code/Data/Models/Deluge/Response/DelugeError.cs
rename to code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeError.cs
index 861af5e6..183368f0 100644
--- a/code/Data/Models/Deluge/Response/DelugeError.cs
+++ b/code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeError.cs
@@ -1,6 +1,6 @@
using Newtonsoft.Json;
-namespace Data.Models.Deluge.Response;
+namespace Cleanuparr.Domain.Entities.Deluge.Response;
public sealed record DelugeError
{
diff --git a/code/Data/Models/Deluge/Response/DelugeFileOrDirectory.cs b/code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeFileOrDirectory.cs
similarity index 93%
rename from code/Data/Models/Deluge/Response/DelugeFileOrDirectory.cs
rename to code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeFileOrDirectory.cs
index 382b6d7e..76effbde 100644
--- a/code/Data/Models/Deluge/Response/DelugeFileOrDirectory.cs
+++ b/code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeFileOrDirectory.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace Data.Models.Deluge.Response;
+namespace Cleanuparr.Domain.Entities.Deluge.Response;
public class DelugeFileOrDirectory
{
diff --git a/code/Data/Models/Deluge/Response/DelugeResponse.cs b/code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeResponse.cs
similarity index 85%
rename from code/Data/Models/Deluge/Response/DelugeResponse.cs
rename to code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeResponse.cs
index 1761d1ff..722ae6e4 100644
--- a/code/Data/Models/Deluge/Response/DelugeResponse.cs
+++ b/code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeResponse.cs
@@ -1,6 +1,6 @@
using Newtonsoft.Json;
-namespace Data.Models.Deluge.Response;
+namespace Cleanuparr.Domain.Entities.Deluge.Response;
public sealed record DelugeResponse
{
diff --git a/code/Data/Models/Deluge/Response/DelugeTorrent.cs b/code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeTorrent.cs
similarity index 92%
rename from code/Data/Models/Deluge/Response/DelugeTorrent.cs
rename to code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeTorrent.cs
index a1295399..d4e1e33e 100644
--- a/code/Data/Models/Deluge/Response/DelugeTorrent.cs
+++ b/code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeTorrent.cs
@@ -1,6 +1,6 @@
using Newtonsoft.Json;
-namespace Data.Models.Deluge.Response;
+namespace Cleanuparr.Domain.Entities.Deluge.Response;
public record DelugeTorrent
{
diff --git a/code/Data/Models/Deluge/Response/DelugeTorrentExtended.cs b/code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeTorrentExtended.cs
similarity index 98%
rename from code/Data/Models/Deluge/Response/DelugeTorrentExtended.cs
rename to code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeTorrentExtended.cs
index 0acb36a6..229b58ce 100644
--- a/code/Data/Models/Deluge/Response/DelugeTorrentExtended.cs
+++ b/code/Cleanuparr.Domain/Entities/Deluge/Response/DelugeTorrentExtended.cs
@@ -1,6 +1,6 @@
using Newtonsoft.Json;
-namespace Data.Models.Deluge.Response;
+namespace Cleanuparr.Domain.Entities.Deluge.Response;
public sealed record DelugeTorrentExtended : DelugeTorrent
{
diff --git a/code/Data/Models/Deluge/Response/DownloadStatus.cs b/code/Cleanuparr.Domain/Entities/Deluge/Response/DownloadStatus.cs
similarity index 94%
rename from code/Data/Models/Deluge/Response/DownloadStatus.cs
rename to code/Cleanuparr.Domain/Entities/Deluge/Response/DownloadStatus.cs
index 080c44f0..ca3fa8f1 100644
--- a/code/Data/Models/Deluge/Response/DownloadStatus.cs
+++ b/code/Cleanuparr.Domain/Entities/Deluge/Response/DownloadStatus.cs
@@ -1,6 +1,6 @@
using Newtonsoft.Json;
-namespace Data.Models.Deluge.Response;
+namespace Cleanuparr.Domain.Entities.Deluge.Response;
public sealed record DownloadStatus
{
diff --git a/code/Data/Models/Lidarr/Album.cs b/code/Cleanuparr.Domain/Entities/Lidarr/Album.cs
similarity index 79%
rename from code/Data/Models/Lidarr/Album.cs
rename to code/Cleanuparr.Domain/Entities/Lidarr/Album.cs
index 52f935a9..b3f54141 100644
--- a/code/Data/Models/Lidarr/Album.cs
+++ b/code/Cleanuparr.Domain/Entities/Lidarr/Album.cs
@@ -1,4 +1,4 @@
-namespace Data.Models.Lidarr;
+namespace Cleanuparr.Domain.Entities.Lidarr;
public sealed record Album
{
diff --git a/code/Data/Models/Lidarr/Artist.cs b/code/Cleanuparr.Domain/Entities/Lidarr/Artist.cs
similarity index 69%
rename from code/Data/Models/Lidarr/Artist.cs
rename to code/Cleanuparr.Domain/Entities/Lidarr/Artist.cs
index ce29fbb6..a72528cc 100644
--- a/code/Data/Models/Lidarr/Artist.cs
+++ b/code/Cleanuparr.Domain/Entities/Lidarr/Artist.cs
@@ -1,4 +1,4 @@
-namespace Data.Models.Lidarr;
+namespace Cleanuparr.Domain.Entities.Lidarr;
public sealed record Artist
{
diff --git a/code/Data/Models/Lidarr/LidarrCommand.cs b/code/Cleanuparr.Domain/Entities/Lidarr/LidarrCommand.cs
similarity index 77%
rename from code/Data/Models/Lidarr/LidarrCommand.cs
rename to code/Cleanuparr.Domain/Entities/Lidarr/LidarrCommand.cs
index 5ad54f50..bd2b623b 100644
--- a/code/Data/Models/Lidarr/LidarrCommand.cs
+++ b/code/Cleanuparr.Domain/Entities/Lidarr/LidarrCommand.cs
@@ -1,4 +1,4 @@
-namespace Data.Models.Lidarr;
+namespace Cleanuparr.Domain.Entities.Lidarr;
public sealed record LidarrCommand
{
diff --git a/code/Data/Models/Radarr/Movie.cs b/code/Cleanuparr.Domain/Entities/Radarr/Movie.cs
similarity index 72%
rename from code/Data/Models/Radarr/Movie.cs
rename to code/Cleanuparr.Domain/Entities/Radarr/Movie.cs
index 6f8c657f..059ab0c3 100644
--- a/code/Data/Models/Radarr/Movie.cs
+++ b/code/Cleanuparr.Domain/Entities/Radarr/Movie.cs
@@ -1,4 +1,4 @@
-namespace Data.Models.Radarr;
+namespace Cleanuparr.Domain.Entities.Radarr;
public sealed record Movie
{
diff --git a/code/Data/Models/Radarr/RadarrCommand.cs b/code/Cleanuparr.Domain/Entities/Radarr/RadarrCommand.cs
similarity index 74%
rename from code/Data/Models/Radarr/RadarrCommand.cs
rename to code/Cleanuparr.Domain/Entities/Radarr/RadarrCommand.cs
index 691b5cea..d750734e 100644
--- a/code/Data/Models/Radarr/RadarrCommand.cs
+++ b/code/Cleanuparr.Domain/Entities/Radarr/RadarrCommand.cs
@@ -1,4 +1,4 @@
-namespace Data.Models.Radarr;
+namespace Cleanuparr.Domain.Entities.Radarr;
public sealed record RadarrCommand
{
diff --git a/code/Common/CustomDataTypes/SmartTimeSpan.cs b/code/Cleanuparr.Domain/Entities/SmartTimeSpan.cs
similarity index 98%
rename from code/Common/CustomDataTypes/SmartTimeSpan.cs
rename to code/Cleanuparr.Domain/Entities/SmartTimeSpan.cs
index 40778e5b..4182ab96 100644
--- a/code/Common/CustomDataTypes/SmartTimeSpan.cs
+++ b/code/Cleanuparr.Domain/Entities/SmartTimeSpan.cs
@@ -1,6 +1,6 @@
using System.Text;
-namespace Common.CustomDataTypes;
+namespace Cleanuparr.Domain.Entities;
public readonly struct SmartTimeSpan : IComparable, IEquatable
{
diff --git a/code/Data/Models/Sonarr/Episode.cs b/code/Cleanuparr.Domain/Entities/Sonarr/Episode.cs
similarity index 81%
rename from code/Data/Models/Sonarr/Episode.cs
rename to code/Cleanuparr.Domain/Entities/Sonarr/Episode.cs
index 2a403847..9cb8079b 100644
--- a/code/Data/Models/Sonarr/Episode.cs
+++ b/code/Cleanuparr.Domain/Entities/Sonarr/Episode.cs
@@ -1,4 +1,4 @@
-namespace Data.Models.Sonarr;
+namespace Cleanuparr.Domain.Entities.Sonarr;
public sealed record Episode
{
diff --git a/code/Data/Models/Sonarr/Series.cs b/code/Cleanuparr.Domain/Entities/Sonarr/Series.cs
similarity index 73%
rename from code/Data/Models/Sonarr/Series.cs
rename to code/Cleanuparr.Domain/Entities/Sonarr/Series.cs
index aaba6102..b4198cfe 100644
--- a/code/Data/Models/Sonarr/Series.cs
+++ b/code/Cleanuparr.Domain/Entities/Sonarr/Series.cs
@@ -1,4 +1,4 @@
-namespace Data.Models.Sonarr;
+namespace Cleanuparr.Domain.Entities.Sonarr;
public sealed record Series
{
diff --git a/code/Data/Models/Sonarr/SonarrCommand.cs b/code/Cleanuparr.Domain/Entities/Sonarr/SonarrCommand.cs
similarity index 77%
rename from code/Data/Models/Sonarr/SonarrCommand.cs
rename to code/Cleanuparr.Domain/Entities/Sonarr/SonarrCommand.cs
index 881fd987..f8d5ec30 100644
--- a/code/Data/Models/Sonarr/SonarrCommand.cs
+++ b/code/Cleanuparr.Domain/Entities/Sonarr/SonarrCommand.cs
@@ -1,6 +1,6 @@
-using Data.Models.Configuration.Arr;
+using Cleanuparr.Domain.Enums;
-namespace Data.Models.Sonarr;
+namespace Cleanuparr.Domain.Entities.Sonarr;
public sealed record SonarrCommand
{
diff --git a/code/Data/Models/Configuration/QueueCleaner/BlocklistType.cs b/code/Cleanuparr.Domain/Enums/BlocklistType.cs
similarity index 51%
rename from code/Data/Models/Configuration/QueueCleaner/BlocklistType.cs
rename to code/Cleanuparr.Domain/Enums/BlocklistType.cs
index e61f5035..eb14f1bf 100644
--- a/code/Data/Models/Configuration/QueueCleaner/BlocklistType.cs
+++ b/code/Cleanuparr.Domain/Enums/BlocklistType.cs
@@ -1,4 +1,4 @@
-namespace Data.Models.Configuration.QueueCleaner;
+namespace Cleanuparr.Domain.Enums;
public enum BlocklistType
{
diff --git a/code/Common/Enums/CertificateValidationType.cs b/code/Cleanuparr.Domain/Enums/CertificateValidationType.cs
similarity index 71%
rename from code/Common/Enums/CertificateValidationType.cs
rename to code/Cleanuparr.Domain/Enums/CertificateValidationType.cs
index 0e7e67bb..c99369e7 100644
--- a/code/Common/Enums/CertificateValidationType.cs
+++ b/code/Cleanuparr.Domain/Enums/CertificateValidationType.cs
@@ -1,4 +1,4 @@
-namespace Common.Enums;
+namespace Cleanuparr.Domain.Enums;
public enum CertificateValidationType
{
diff --git a/code/Data/Enums/CleanReason.cs b/code/Cleanuparr.Domain/Enums/CleanReason.cs
similarity index 67%
rename from code/Data/Enums/CleanReason.cs
rename to code/Cleanuparr.Domain/Enums/CleanReason.cs
index 610df630..60ad97ac 100644
--- a/code/Data/Enums/CleanReason.cs
+++ b/code/Cleanuparr.Domain/Enums/CleanReason.cs
@@ -1,4 +1,4 @@
-namespace Data.Enums;
+namespace Cleanuparr.Domain.Enums;
public enum CleanReason
{
diff --git a/code/Data/Enums/DeleteReason.cs b/code/Cleanuparr.Domain/Enums/DeleteReason.cs
similarity index 84%
rename from code/Data/Enums/DeleteReason.cs
rename to code/Cleanuparr.Domain/Enums/DeleteReason.cs
index f5dca920..af3a9394 100644
--- a/code/Data/Enums/DeleteReason.cs
+++ b/code/Cleanuparr.Domain/Enums/DeleteReason.cs
@@ -1,4 +1,4 @@
-namespace Data.Enums;
+namespace Cleanuparr.Domain.Enums;
public enum DeleteReason
{
diff --git a/code/Common/Enums/DownloadClientType.cs b/code/Cleanuparr.Domain/Enums/DownloadClientType.cs
similarity index 59%
rename from code/Common/Enums/DownloadClientType.cs
rename to code/Cleanuparr.Domain/Enums/DownloadClientType.cs
index 95bdf11e..3ba480ac 100644
--- a/code/Common/Enums/DownloadClientType.cs
+++ b/code/Cleanuparr.Domain/Enums/DownloadClientType.cs
@@ -1,4 +1,4 @@
-namespace Common.Enums;
+namespace Cleanuparr.Domain.Enums;
public enum DownloadClientType
{
diff --git a/code/Common/Enums/DownloadClientTypeName.cs b/code/Cleanuparr.Domain/Enums/DownloadClientTypeName.cs
similarity index 71%
rename from code/Common/Enums/DownloadClientTypeName.cs
rename to code/Cleanuparr.Domain/Enums/DownloadClientTypeName.cs
index d79c5ff2..0d376c81 100644
--- a/code/Common/Enums/DownloadClientTypeName.cs
+++ b/code/Cleanuparr.Domain/Enums/DownloadClientTypeName.cs
@@ -1,4 +1,4 @@
-namespace Common.Enums;
+namespace Cleanuparr.Domain.Enums;
public enum DownloadClientTypeName
{
diff --git a/code/Data/Enums/EventSeverity.cs b/code/Cleanuparr.Domain/Enums/EventSeverity.cs
similarity index 70%
rename from code/Data/Enums/EventSeverity.cs
rename to code/Cleanuparr.Domain/Enums/EventSeverity.cs
index a9d75071..f2428889 100644
--- a/code/Data/Enums/EventSeverity.cs
+++ b/code/Cleanuparr.Domain/Enums/EventSeverity.cs
@@ -1,4 +1,4 @@
-namespace Data.Enums;
+namespace Cleanuparr.Domain.Enums;
public enum EventSeverity
{
diff --git a/code/Data/Enums/EventType.cs b/code/Cleanuparr.Domain/Enums/EventType.cs
similarity index 85%
rename from code/Data/Enums/EventType.cs
rename to code/Cleanuparr.Domain/Enums/EventType.cs
index c452ec76..6040e058 100644
--- a/code/Data/Enums/EventType.cs
+++ b/code/Cleanuparr.Domain/Enums/EventType.cs
@@ -1,4 +1,4 @@
-namespace Data.Enums;
+namespace Cleanuparr.Domain.Enums;
public enum EventType
{
diff --git a/code/Data/Enums/InstanceType.cs b/code/Cleanuparr.Domain/Enums/InstanceType.cs
similarity index 70%
rename from code/Data/Enums/InstanceType.cs
rename to code/Cleanuparr.Domain/Enums/InstanceType.cs
index 498c9dbb..02416687 100644
--- a/code/Data/Enums/InstanceType.cs
+++ b/code/Cleanuparr.Domain/Enums/InstanceType.cs
@@ -1,4 +1,4 @@
-namespace Data.Enums;
+namespace Cleanuparr.Domain.Enums;
public enum InstanceType
{
diff --git a/code/Data/Models/Configuration/Arr/SonarrSearchType.cs b/code/Cleanuparr.Domain/Enums/SonarrSearchType.cs
similarity index 60%
rename from code/Data/Models/Configuration/Arr/SonarrSearchType.cs
rename to code/Cleanuparr.Domain/Enums/SonarrSearchType.cs
index 2709aa29..f31c7c2d 100644
--- a/code/Data/Models/Configuration/Arr/SonarrSearchType.cs
+++ b/code/Cleanuparr.Domain/Enums/SonarrSearchType.cs
@@ -1,4 +1,4 @@
-namespace Data.Models.Configuration.Arr;
+namespace Cleanuparr.Domain.Enums;
public enum SonarrSearchType
{
diff --git a/code/Data/Enums/StrikeType.cs b/code/Cleanuparr.Domain/Enums/StrikeType.cs
similarity index 74%
rename from code/Data/Enums/StrikeType.cs
rename to code/Cleanuparr.Domain/Enums/StrikeType.cs
index 8549a02d..fda33934 100644
--- a/code/Data/Enums/StrikeType.cs
+++ b/code/Cleanuparr.Domain/Enums/StrikeType.cs
@@ -1,4 +1,4 @@
-namespace Data.Enums;
+namespace Cleanuparr.Domain.Enums;
public enum StrikeType
{
diff --git a/code/Data/Models/Deluge/Exceptions/DelugeClientException.cs b/code/Cleanuparr.Domain/Exceptions/DelugeClientException.cs
similarity index 100%
rename from code/Data/Models/Deluge/Exceptions/DelugeClientException.cs
rename to code/Cleanuparr.Domain/Exceptions/DelugeClientException.cs
diff --git a/code/Data/Models/Deluge/Exceptions/DelugeLoginException.cs b/code/Cleanuparr.Domain/Exceptions/DelugeLoginException.cs
similarity index 100%
rename from code/Data/Models/Deluge/Exceptions/DelugeLoginException.cs
rename to code/Cleanuparr.Domain/Exceptions/DelugeLoginException.cs
diff --git a/code/Data/Models/Deluge/Exceptions/DelugeLogoutException.cs b/code/Cleanuparr.Domain/Exceptions/DelugeLogoutException.cs
similarity index 100%
rename from code/Data/Models/Deluge/Exceptions/DelugeLogoutException.cs
rename to code/Cleanuparr.Domain/Exceptions/DelugeLogoutException.cs
diff --git a/code/Common/Exceptions/FatalException.cs b/code/Cleanuparr.Domain/Exceptions/FatalException.cs
similarity index 77%
rename from code/Common/Exceptions/FatalException.cs
rename to code/Cleanuparr.Domain/Exceptions/FatalException.cs
index 1966150c..b4954688 100644
--- a/code/Common/Exceptions/FatalException.cs
+++ b/code/Cleanuparr.Domain/Exceptions/FatalException.cs
@@ -1,4 +1,4 @@
-namespace Common.Exceptions;
+namespace Cleanuparr.Domain.Exceptions;
public class FatalException : Exception
{
diff --git a/code/Common/Exceptions/ValidationException.cs b/code/Cleanuparr.Domain/Exceptions/ValidationException.cs
similarity index 80%
rename from code/Common/Exceptions/ValidationException.cs
rename to code/Cleanuparr.Domain/Exceptions/ValidationException.cs
index 87074adc..0fe5d7c5 100644
--- a/code/Common/Exceptions/ValidationException.cs
+++ b/code/Cleanuparr.Domain/Exceptions/ValidationException.cs
@@ -1,4 +1,4 @@
-namespace Common.Exceptions;
+namespace Cleanuparr.Domain.Exceptions;
public sealed class ValidationException : Exception
{
diff --git a/code/Infrastructure.Tests/Infrastructure.Tests.csproj b/code/Cleanuparr.Infrastructure.Tests/Cleanuparr.Infrastructure.Tests.csproj
similarity index 52%
rename from code/Infrastructure.Tests/Infrastructure.Tests.csproj
rename to code/Cleanuparr.Infrastructure.Tests/Cleanuparr.Infrastructure.Tests.csproj
index a15206b8..94e75a50 100644
--- a/code/Infrastructure.Tests/Infrastructure.Tests.csproj
+++ b/code/Cleanuparr.Infrastructure.Tests/Cleanuparr.Infrastructure.Tests.csproj
@@ -4,34 +4,29 @@
net9.0
enable
enable
- false
+
+
+
+
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/code/Infrastructure.Tests/Health/HealthCheckServiceFixture.cs b/code/Cleanuparr.Infrastructure.Tests/Health/HealthCheckServiceFixture.cs
similarity index 100%
rename from code/Infrastructure.Tests/Health/HealthCheckServiceFixture.cs
rename to code/Cleanuparr.Infrastructure.Tests/Health/HealthCheckServiceFixture.cs
diff --git a/code/Infrastructure.Tests/Health/HealthCheckServiceTests.cs b/code/Cleanuparr.Infrastructure.Tests/Health/HealthCheckServiceTests.cs
similarity index 100%
rename from code/Infrastructure.Tests/Health/HealthCheckServiceTests.cs
rename to code/Cleanuparr.Infrastructure.Tests/Health/HealthCheckServiceTests.cs
diff --git a/code/Infrastructure.Tests/Http/DynamicHttpClientProviderFixture.cs b/code/Cleanuparr.Infrastructure.Tests/Http/DynamicHttpClientProviderFixture.cs
similarity index 100%
rename from code/Infrastructure.Tests/Http/DynamicHttpClientProviderFixture.cs
rename to code/Cleanuparr.Infrastructure.Tests/Http/DynamicHttpClientProviderFixture.cs
diff --git a/code/Infrastructure.Tests/Http/DynamicHttpClientProviderTests.cs b/code/Cleanuparr.Infrastructure.Tests/Http/DynamicHttpClientProviderTests.cs
similarity index 100%
rename from code/Infrastructure.Tests/Http/DynamicHttpClientProviderTests.cs
rename to code/Cleanuparr.Infrastructure.Tests/Http/DynamicHttpClientProviderTests.cs
diff --git a/code/Infrastructure.Tests/Verticals/ContentBlocker/FilenameEvaluatorFixture.cs b/code/Cleanuparr.Infrastructure.Tests/Verticals/ContentBlocker/FilenameEvaluatorFixture.cs
similarity index 74%
rename from code/Infrastructure.Tests/Verticals/ContentBlocker/FilenameEvaluatorFixture.cs
rename to code/Cleanuparr.Infrastructure.Tests/Verticals/ContentBlocker/FilenameEvaluatorFixture.cs
index 45d5546e..caad5a59 100644
--- a/code/Infrastructure.Tests/Verticals/ContentBlocker/FilenameEvaluatorFixture.cs
+++ b/code/Cleanuparr.Infrastructure.Tests/Verticals/ContentBlocker/FilenameEvaluatorFixture.cs
@@ -1,8 +1,8 @@
-using Infrastructure.Verticals.ContentBlocker;
+using Cleanuparr.Infrastructure.Features.ContentBlocker;
using Microsoft.Extensions.Logging;
using NSubstitute;
-namespace Infrastructure.Tests.Verticals.ContentBlocker;
+namespace Cleanuparr.Infrastructure.Tests.Verticals.ContentBlocker;
public class FilenameEvaluatorFixture
{
diff --git a/code/Infrastructure.Tests/Verticals/ContentBlocker/FilenameEvaluatorTests.cs b/code/Cleanuparr.Infrastructure.Tests/Verticals/ContentBlocker/FilenameEvaluatorTests.cs
similarity index 98%
rename from code/Infrastructure.Tests/Verticals/ContentBlocker/FilenameEvaluatorTests.cs
rename to code/Cleanuparr.Infrastructure.Tests/Verticals/ContentBlocker/FilenameEvaluatorTests.cs
index 19e091d6..865c5130 100644
--- a/code/Infrastructure.Tests/Verticals/ContentBlocker/FilenameEvaluatorTests.cs
+++ b/code/Cleanuparr.Infrastructure.Tests/Verticals/ContentBlocker/FilenameEvaluatorTests.cs
@@ -1,9 +1,10 @@
using System.Collections.Concurrent;
using System.Text.RegularExpressions;
-using Data.Models.Configuration.QueueCleaner;
+using Cleanuparr.Domain.Enums;
using Shouldly;
+using Xunit;
-namespace Infrastructure.Tests.Verticals.ContentBlocker;
+namespace Cleanuparr.Infrastructure.Tests.Verticals.ContentBlocker;
public class FilenameEvaluatorTests : IClassFixture
{
diff --git a/code/Infrastructure.Tests/Verticals/DownloadClient/DownloadServiceFixture.cs b/code/Cleanuparr.Infrastructure.Tests/Verticals/DownloadClient/DownloadServiceFixture.cs
similarity index 100%
rename from code/Infrastructure.Tests/Verticals/DownloadClient/DownloadServiceFixture.cs
rename to code/Cleanuparr.Infrastructure.Tests/Verticals/DownloadClient/DownloadServiceFixture.cs
diff --git a/code/Infrastructure.Tests/Verticals/DownloadClient/DownloadServiceTests.cs b/code/Cleanuparr.Infrastructure.Tests/Verticals/DownloadClient/DownloadServiceTests.cs
similarity index 100%
rename from code/Infrastructure.Tests/Verticals/DownloadClient/DownloadServiceTests.cs
rename to code/Cleanuparr.Infrastructure.Tests/Verticals/DownloadClient/DownloadServiceTests.cs
diff --git a/code/Infrastructure/Infrastructure.csproj b/code/Cleanuparr.Infrastructure/Cleanuparr.Infrastructure.csproj
similarity index 55%
rename from code/Infrastructure/Infrastructure.csproj
rename to code/Cleanuparr.Infrastructure/Cleanuparr.Infrastructure.csproj
index 0c0a8c74..ac8ea5ce 100644
--- a/code/Infrastructure/Infrastructure.csproj
+++ b/code/Cleanuparr.Infrastructure/Cleanuparr.Infrastructure.csproj
@@ -1,4 +1,4 @@
-
+
net9.0
@@ -7,24 +7,24 @@
-
-
+
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
diff --git a/code/Infrastructure/Events/EventCleanupService.cs b/code/Cleanuparr.Infrastructure/Events/EventCleanupService.cs
similarity index 97%
rename from code/Infrastructure/Events/EventCleanupService.cs
rename to code/Cleanuparr.Infrastructure/Events/EventCleanupService.cs
index 5b82233b..b03c8b44 100644
--- a/code/Infrastructure/Events/EventCleanupService.cs
+++ b/code/Cleanuparr.Infrastructure/Events/EventCleanupService.cs
@@ -1,10 +1,10 @@
-using Data;
+using Cleanuparr.Persistence;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Events;
+namespace Cleanuparr.Infrastructure.Events;
///
/// Background service that periodically cleans up old events
diff --git a/code/Infrastructure/Events/EventPublisher.cs b/code/Cleanuparr.Infrastructure/Events/EventPublisher.cs
similarity index 95%
rename from code/Infrastructure/Events/EventPublisher.cs
rename to code/Cleanuparr.Infrastructure/Events/EventPublisher.cs
index 5f68ca6a..fb75535a 100644
--- a/code/Infrastructure/Events/EventPublisher.cs
+++ b/code/Cleanuparr.Infrastructure/Events/EventPublisher.cs
@@ -1,15 +1,16 @@
+using System.Text.Json;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Features.Context;
+using Cleanuparr.Infrastructure.Features.Notifications;
+using Cleanuparr.Infrastructure.Hubs;
+using Cleanuparr.Persistence;
+using Cleanuparr.Persistence.Models.Events;
+using Infrastructure.Interceptors;
+using Infrastructure.Verticals.Notifications;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Logging;
-using System.Text.Json;
-using Data;
-using Data.Enums;
-using Data.Models.Events;
-using Infrastructure.Verticals.Notifications;
-using Infrastructure.Verticals.Context;
-using Infrastructure.Interceptors;
-using Infrastructure.Hubs;
-namespace Infrastructure.Events;
+namespace Cleanuparr.Infrastructure.Events;
///
/// Service for publishing events to database and SignalR hub
diff --git a/code/Infrastructure/Extensions/DelugeExtensions.cs b/code/Cleanuparr.Infrastructure/Extensions/DelugeExtensions.cs
similarity index 84%
rename from code/Infrastructure/Extensions/DelugeExtensions.cs
rename to code/Cleanuparr.Infrastructure/Extensions/DelugeExtensions.cs
index 0b4348eb..7d911f4c 100644
--- a/code/Infrastructure/Extensions/DelugeExtensions.cs
+++ b/code/Cleanuparr.Infrastructure/Extensions/DelugeExtensions.cs
@@ -1,8 +1,8 @@
-using Data.Models.Deluge.Response;
-using Infrastructure.Helpers;
+using Cleanuparr.Domain.Entities.Deluge.Response;
+using Cleanuparr.Infrastructure.Services;
using Infrastructure.Services;
-namespace Infrastructure.Extensions;
+namespace Cleanuparr.Infrastructure.Extensions;
public static class DelugeExtensions
{
diff --git a/code/Infrastructure/Extensions/IpAddressExtensions.cs b/code/Cleanuparr.Infrastructure/Extensions/IpAddressExtensions.cs
similarity index 97%
rename from code/Infrastructure/Extensions/IpAddressExtensions.cs
rename to code/Cleanuparr.Infrastructure/Extensions/IpAddressExtensions.cs
index f7758803..9d879500 100644
--- a/code/Infrastructure/Extensions/IpAddressExtensions.cs
+++ b/code/Cleanuparr.Infrastructure/Extensions/IpAddressExtensions.cs
@@ -1,7 +1,7 @@
using System.Net;
using System.Net.Sockets;
-namespace Infrastructure.Extensions;
+namespace Cleanuparr.Infrastructure.Extensions;
public static class IpAddressExtensions
{
diff --git a/code/Infrastructure/Extensions/QBitExtensions.cs b/code/Cleanuparr.Infrastructure/Extensions/QBitExtensions.cs
similarity index 93%
rename from code/Infrastructure/Extensions/QBitExtensions.cs
rename to code/Cleanuparr.Infrastructure/Extensions/QBitExtensions.cs
index ca26ff8a..7914e22f 100644
--- a/code/Infrastructure/Extensions/QBitExtensions.cs
+++ b/code/Cleanuparr.Infrastructure/Extensions/QBitExtensions.cs
@@ -1,8 +1,8 @@
-using Infrastructure.Helpers;
+using Cleanuparr.Infrastructure.Services;
using Infrastructure.Services;
using QBittorrent.Client;
-namespace Infrastructure.Extensions;
+namespace Cleanuparr.Infrastructure.Extensions;
public static class QBitExtensions
{
diff --git a/code/Infrastructure/Extensions/TransmissionExtensions.cs b/code/Cleanuparr.Infrastructure/Extensions/TransmissionExtensions.cs
similarity index 92%
rename from code/Infrastructure/Extensions/TransmissionExtensions.cs
rename to code/Cleanuparr.Infrastructure/Extensions/TransmissionExtensions.cs
index 47c29e70..747795ee 100644
--- a/code/Infrastructure/Extensions/TransmissionExtensions.cs
+++ b/code/Cleanuparr.Infrastructure/Extensions/TransmissionExtensions.cs
@@ -1,8 +1,8 @@
-using Infrastructure.Helpers;
+using Cleanuparr.Infrastructure.Services;
using Infrastructure.Services;
using Transmission.API.RPC.Entity;
-namespace Infrastructure.Extensions;
+namespace Cleanuparr.Infrastructure.Extensions;
public static class TransmissionExtensions
{
diff --git a/code/Infrastructure/Verticals/Arr/ArrClient.cs b/code/Cleanuparr.Infrastructure/Features/Arr/ArrClient.cs
similarity index 95%
rename from code/Infrastructure/Verticals/Arr/ArrClient.cs
rename to code/Cleanuparr.Infrastructure/Features/Arr/ArrClient.cs
index 804667f6..78a52713 100644
--- a/code/Infrastructure/Verticals/Arr/ArrClient.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Arr/ArrClient.cs
@@ -1,17 +1,17 @@
-using Data.Models.Configuration.Arr;
-using Data.Models.Configuration.QueueCleaner;
-using Common.Helpers;
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Features.Arr.Interfaces;
+using Cleanuparr.Infrastructure.Features.Context;
+using Cleanuparr.Infrastructure.Features.ItemStriker;
+using Cleanuparr.Persistence.Models.Configuration.Arr;
+using Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
+using Cleanuparr.Shared.Helpers;
using Data.Models.Arr;
using Data.Models.Arr.Queue;
using Infrastructure.Interceptors;
-using Infrastructure.Verticals.Arr.Interfaces;
-using Infrastructure.Verticals.Context;
-using Infrastructure.Verticals.ItemStriker;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
-namespace Infrastructure.Verticals.Arr;
+namespace Cleanuparr.Infrastructure.Features.Arr;
public abstract class ArrClient : IArrClient
{
diff --git a/code/Infrastructure/Verticals/Arr/ArrClientFactory.cs b/code/Cleanuparr.Infrastructure/Features/Arr/ArrClientFactory.cs
similarity index 84%
rename from code/Infrastructure/Verticals/Arr/ArrClientFactory.cs
rename to code/Cleanuparr.Infrastructure/Features/Arr/ArrClientFactory.cs
index ffec5dc5..e0b1c823 100644
--- a/code/Infrastructure/Verticals/Arr/ArrClientFactory.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Arr/ArrClientFactory.cs
@@ -1,7 +1,7 @@
-using Data.Enums;
-using Infrastructure.Verticals.Arr.Interfaces;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Features.Arr.Interfaces;
-namespace Infrastructure.Verticals.Arr;
+namespace Cleanuparr.Infrastructure.Features.Arr;
public sealed class ArrClientFactory
{
diff --git a/code/Infrastructure/Verticals/Arr/ArrQueueIterator.cs b/code/Cleanuparr.Infrastructure/Features/Arr/ArrQueueIterator.cs
similarity index 89%
rename from code/Infrastructure/Verticals/Arr/ArrQueueIterator.cs
rename to code/Cleanuparr.Infrastructure/Features/Arr/ArrQueueIterator.cs
index 4256a57e..9a329ae7 100644
--- a/code/Infrastructure/Verticals/Arr/ArrQueueIterator.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Arr/ArrQueueIterator.cs
@@ -1,10 +1,9 @@
-using Common.Configuration;
-using Data.Models.Configuration.Arr;
+using Cleanuparr.Infrastructure.Features.Arr.Interfaces;
+using Cleanuparr.Persistence.Models.Configuration.Arr;
using Data.Models.Arr.Queue;
-using Infrastructure.Verticals.Arr.Interfaces;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Verticals.Arr;
+namespace Cleanuparr.Infrastructure.Features.Arr;
public sealed class ArrQueueIterator
{
diff --git a/code/Infrastructure/Verticals/Arr/Interfaces/IArrClient.cs b/code/Cleanuparr.Infrastructure/Features/Arr/Interfaces/IArrClient.cs
similarity index 85%
rename from code/Infrastructure/Verticals/Arr/Interfaces/IArrClient.cs
rename to code/Cleanuparr.Infrastructure/Features/Arr/Interfaces/IArrClient.cs
index d114df95..b2385489 100644
--- a/code/Infrastructure/Verticals/Arr/Interfaces/IArrClient.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Arr/Interfaces/IArrClient.cs
@@ -1,9 +1,9 @@
-using Data.Models.Configuration.Arr;
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Persistence.Models.Configuration.Arr;
using Data.Models.Arr;
using Data.Models.Arr.Queue;
-namespace Infrastructure.Verticals.Arr.Interfaces;
+namespace Cleanuparr.Infrastructure.Features.Arr.Interfaces;
public interface IArrClient
{
diff --git a/code/Cleanuparr.Infrastructure/Features/Arr/Interfaces/ILidarrClient.cs b/code/Cleanuparr.Infrastructure/Features/Arr/Interfaces/ILidarrClient.cs
new file mode 100644
index 00000000..5ceb0235
--- /dev/null
+++ b/code/Cleanuparr.Infrastructure/Features/Arr/Interfaces/ILidarrClient.cs
@@ -0,0 +1,5 @@
+namespace Cleanuparr.Infrastructure.Features.Arr.Interfaces;
+
+public interface ILidarrClient : IArrClient
+{
+}
\ No newline at end of file
diff --git a/code/Cleanuparr.Infrastructure/Features/Arr/Interfaces/IRadarrClient.cs b/code/Cleanuparr.Infrastructure/Features/Arr/Interfaces/IRadarrClient.cs
new file mode 100644
index 00000000..bfd1d020
--- /dev/null
+++ b/code/Cleanuparr.Infrastructure/Features/Arr/Interfaces/IRadarrClient.cs
@@ -0,0 +1,5 @@
+namespace Cleanuparr.Infrastructure.Features.Arr.Interfaces;
+
+public interface IRadarrClient : IArrClient
+{
+}
\ No newline at end of file
diff --git a/code/Cleanuparr.Infrastructure/Features/Arr/Interfaces/ISonarrClient.cs b/code/Cleanuparr.Infrastructure/Features/Arr/Interfaces/ISonarrClient.cs
new file mode 100644
index 00000000..3f9c4618
--- /dev/null
+++ b/code/Cleanuparr.Infrastructure/Features/Arr/Interfaces/ISonarrClient.cs
@@ -0,0 +1,5 @@
+namespace Cleanuparr.Infrastructure.Features.Arr.Interfaces;
+
+public interface ISonarrClient : IArrClient
+{
+}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/Arr/LidarrClient.cs b/code/Cleanuparr.Infrastructure/Features/Arr/LidarrClient.cs
similarity index 95%
rename from code/Infrastructure/Verticals/Arr/LidarrClient.cs
rename to code/Cleanuparr.Infrastructure/Features/Arr/LidarrClient.cs
index 712cf254..b810001e 100644
--- a/code/Infrastructure/Verticals/Arr/LidarrClient.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Arr/LidarrClient.cs
@@ -1,15 +1,15 @@
using System.Text;
-using Data.Models.Configuration.Arr;
+using Cleanuparr.Domain.Entities.Lidarr;
+using Cleanuparr.Infrastructure.Features.Arr.Interfaces;
+using Cleanuparr.Infrastructure.Features.ItemStriker;
+using Cleanuparr.Persistence.Models.Configuration.Arr;
using Data.Models.Arr;
using Data.Models.Arr.Queue;
-using Data.Models.Lidarr;
using Infrastructure.Interceptors;
-using Infrastructure.Verticals.Arr.Interfaces;
-using Infrastructure.Verticals.ItemStriker;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
-namespace Infrastructure.Verticals.Arr;
+namespace Cleanuparr.Infrastructure.Features.Arr;
public class LidarrClient : ArrClient, ILidarrClient
{
diff --git a/code/Infrastructure/Verticals/Arr/RadarrClient.cs b/code/Cleanuparr.Infrastructure/Features/Arr/RadarrClient.cs
similarity index 94%
rename from code/Infrastructure/Verticals/Arr/RadarrClient.cs
rename to code/Cleanuparr.Infrastructure/Features/Arr/RadarrClient.cs
index ac03f95a..cc72c039 100644
--- a/code/Infrastructure/Verticals/Arr/RadarrClient.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Arr/RadarrClient.cs
@@ -1,15 +1,15 @@
using System.Text;
-using Data.Models.Configuration.Arr;
+using Cleanuparr.Domain.Entities.Radarr;
+using Cleanuparr.Infrastructure.Features.Arr.Interfaces;
+using Cleanuparr.Infrastructure.Features.ItemStriker;
+using Cleanuparr.Persistence.Models.Configuration.Arr;
using Data.Models.Arr;
using Data.Models.Arr.Queue;
-using Data.Models.Radarr;
using Infrastructure.Interceptors;
-using Infrastructure.Verticals.Arr.Interfaces;
-using Infrastructure.Verticals.ItemStriker;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
-namespace Infrastructure.Verticals.Arr;
+namespace Cleanuparr.Infrastructure.Features.Arr;
public class RadarrClient : ArrClient, IRadarrClient
{
diff --git a/code/Infrastructure/Verticals/Arr/SonarrClient.cs b/code/Cleanuparr.Infrastructure/Features/Arr/SonarrClient.cs
similarity index 96%
rename from code/Infrastructure/Verticals/Arr/SonarrClient.cs
rename to code/Cleanuparr.Infrastructure/Features/Arr/SonarrClient.cs
index 3981d8f9..ed5ac911 100644
--- a/code/Infrastructure/Verticals/Arr/SonarrClient.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Arr/SonarrClient.cs
@@ -1,16 +1,17 @@
using System.Text;
-using Data.Models.Configuration.Arr;
+using Cleanuparr.Domain.Entities.Sonarr;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Features.Arr.Interfaces;
+using Cleanuparr.Infrastructure.Features.ItemStriker;
+using Cleanuparr.Persistence.Models.Configuration.Arr;
using Data.Models.Arr;
using Data.Models.Arr.Queue;
-using Data.Models.Sonarr;
using Infrastructure.Interceptors;
-using Infrastructure.Verticals.Arr.Interfaces;
-using Infrastructure.Verticals.ItemStriker;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
-using Series = Data.Models.Sonarr.Series;
+using Series = Cleanuparr.Domain.Entities.Sonarr.Series;
-namespace Infrastructure.Verticals.Arr;
+namespace Cleanuparr.Infrastructure.Features.Arr;
public class SonarrClient : ArrClient, ISonarrClient
{
diff --git a/code/Infrastructure/Verticals/ContentBlocker/BlocklistProvider.cs b/code/Cleanuparr.Infrastructure/Features/ContentBlocker/BlocklistProvider.cs
similarity index 96%
rename from code/Infrastructure/Verticals/ContentBlocker/BlocklistProvider.cs
rename to code/Cleanuparr.Infrastructure/Features/ContentBlocker/BlocklistProvider.cs
index a37ccfcf..6af36f55 100644
--- a/code/Infrastructure/Verticals/ContentBlocker/BlocklistProvider.cs
+++ b/code/Cleanuparr.Infrastructure/Features/ContentBlocker/BlocklistProvider.cs
@@ -3,17 +3,17 @@ using System.Diagnostics;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
-using Data.Models.Configuration.QueueCleaner;
-using Common.Helpers;
-using Data;
-using Data.Enums;
-using Infrastructure.Helpers;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Helpers;
+using Cleanuparr.Persistence;
+using Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
+using Cleanuparr.Shared.Helpers;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Verticals.ContentBlocker;
+namespace Cleanuparr.Infrastructure.Features.ContentBlocker;
public sealed class BlocklistProvider
{
diff --git a/code/Infrastructure/Verticals/ContentBlocker/FilenameEvaluator.cs b/code/Cleanuparr.Infrastructure/Features/ContentBlocker/FilenameEvaluator.cs
similarity index 96%
rename from code/Infrastructure/Verticals/ContentBlocker/FilenameEvaluator.cs
rename to code/Cleanuparr.Infrastructure/Features/ContentBlocker/FilenameEvaluator.cs
index a7cd9413..47ca12b2 100644
--- a/code/Infrastructure/Verticals/ContentBlocker/FilenameEvaluator.cs
+++ b/code/Cleanuparr.Infrastructure/Features/ContentBlocker/FilenameEvaluator.cs
@@ -1,9 +1,9 @@
using System.Collections.Concurrent;
using System.Text.RegularExpressions;
-using Data.Models.Configuration.QueueCleaner;
+using Cleanuparr.Domain.Enums;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Verticals.ContentBlocker;
+namespace Cleanuparr.Infrastructure.Features.ContentBlocker;
public class FilenameEvaluator : IFilenameEvaluator
{
diff --git a/code/Infrastructure/Verticals/ContentBlocker/IFilenameEvaluator.cs b/code/Cleanuparr.Infrastructure/Features/ContentBlocker/IFilenameEvaluator.cs
similarity index 70%
rename from code/Infrastructure/Verticals/ContentBlocker/IFilenameEvaluator.cs
rename to code/Cleanuparr.Infrastructure/Features/ContentBlocker/IFilenameEvaluator.cs
index 3a646691..23a50fda 100644
--- a/code/Infrastructure/Verticals/ContentBlocker/IFilenameEvaluator.cs
+++ b/code/Cleanuparr.Infrastructure/Features/ContentBlocker/IFilenameEvaluator.cs
@@ -1,8 +1,8 @@
using System.Collections.Concurrent;
using System.Text.RegularExpressions;
-using Data.Models.Configuration.QueueCleaner;
+using Cleanuparr.Domain.Enums;
-namespace Infrastructure.Verticals.ContentBlocker;
+namespace Cleanuparr.Infrastructure.Features.ContentBlocker;
public interface IFilenameEvaluator
{
diff --git a/code/Infrastructure/Verticals/Context/ContextProvider.cs b/code/Cleanuparr.Infrastructure/Features/Context/ContextProvider.cs
similarity index 95%
rename from code/Infrastructure/Verticals/Context/ContextProvider.cs
rename to code/Cleanuparr.Infrastructure/Features/Context/ContextProvider.cs
index 36274ba2..6bb0f002 100644
--- a/code/Infrastructure/Verticals/Context/ContextProvider.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Context/ContextProvider.cs
@@ -1,6 +1,6 @@
using System.Collections.Immutable;
-namespace Infrastructure.Verticals.Context;
+namespace Cleanuparr.Infrastructure.Features.Context;
public static class ContextProvider
{
diff --git a/code/Infrastructure/Verticals/DownloadClient/Deluge/DelugeClient.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/DelugeClient.cs
similarity index 95%
rename from code/Infrastructure/Verticals/DownloadClient/Deluge/DelugeClient.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/DelugeClient.cs
index e8228bc7..e5a9a01c 100644
--- a/code/Infrastructure/Verticals/DownloadClient/Deluge/DelugeClient.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/DelugeClient.cs
@@ -1,15 +1,13 @@
using System.Net.Http.Headers;
-using System.Text.Json.Serialization;
-using Common.Configuration;
-using Common.Exceptions;
+using Cleanuparr.Domain.Entities.Deluge.Request;
+using Cleanuparr.Domain.Entities.Deluge.Response;
+using Cleanuparr.Domain.Exceptions;
+using Cleanuparr.Infrastructure.Features.DownloadClient.Deluge.Extensions;
+using Cleanuparr.Persistence.Models.Configuration;
using Data.Models.Deluge.Exceptions;
-using Data.Models.Deluge.Request;
-using Data.Models.Deluge.Response;
-using Infrastructure.Verticals.DownloadClient.Deluge.Extensions;
-using Microsoft.Extensions.Options;
using Newtonsoft.Json;
-namespace Infrastructure.Verticals.DownloadClient.Deluge;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient.Deluge;
public sealed class DelugeClient
{
diff --git a/code/Infrastructure/Verticals/DownloadClient/Deluge/DelugeService.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/DelugeService.cs
similarity index 91%
rename from code/Infrastructure/Verticals/DownloadClient/Deluge/DelugeService.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/DelugeService.cs
index 289e4746..3cef20ae 100644
--- a/code/Infrastructure/Verticals/DownloadClient/Deluge/DelugeService.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/DelugeService.cs
@@ -1,16 +1,16 @@
-using Common.Configuration;
-using Common.Exceptions;
-using Data.Models.Deluge.Response;
-using Infrastructure.Events;
+using Cleanuparr.Domain.Entities.Deluge.Response;
+using Cleanuparr.Domain.Exceptions;
+using Cleanuparr.Infrastructure.Events;
+using Cleanuparr.Infrastructure.Features.ContentBlocker;
+using Cleanuparr.Infrastructure.Features.Files;
+using Cleanuparr.Infrastructure.Features.ItemStriker;
+using Cleanuparr.Infrastructure.Http;
+using Cleanuparr.Persistence.Models.Configuration;
using Infrastructure.Interceptors;
-using Infrastructure.Verticals.ContentBlocker;
-using Infrastructure.Verticals.Files;
-using Infrastructure.Verticals.ItemStriker;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
-using Infrastructure.Http;
-namespace Infrastructure.Verticals.DownloadClient.Deluge;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient.Deluge;
public partial class DelugeService : DownloadService, IDelugeService
{
diff --git a/code/Infrastructure/Verticals/DownloadClient/Deluge/DelugeServiceDC.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/DelugeServiceDC.cs
similarity index 96%
rename from code/Infrastructure/Verticals/DownloadClient/Deluge/DelugeServiceDC.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/DelugeServiceDC.cs
index 9c7a7dcd..5739a761 100644
--- a/code/Infrastructure/Verticals/DownloadClient/Deluge/DelugeServiceDC.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/DelugeServiceDC.cs
@@ -1,11 +1,11 @@
-using Data.Models.Configuration.DownloadCleaner;
-using Data.Enums;
-using Data.Models.Deluge.Response;
-using Infrastructure.Extensions;
-using Infrastructure.Verticals.Context;
+using Cleanuparr.Domain.Entities.Deluge.Response;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Extensions;
+using Cleanuparr.Infrastructure.Features.Context;
+using Cleanuparr.Persistence.Models.Configuration.DownloadCleaner;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Verticals.DownloadClient.Deluge;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient.Deluge;
public partial class DelugeService
{
diff --git a/code/Infrastructure/Verticals/DownloadClient/Deluge/DelugeServiceQC.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/DelugeServiceQC.cs
similarity index 96%
rename from code/Infrastructure/Verticals/DownloadClient/Deluge/DelugeServiceQC.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/DelugeServiceQC.cs
index f5ad3e8d..1b9d472f 100644
--- a/code/Infrastructure/Verticals/DownloadClient/Deluge/DelugeServiceQC.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/DelugeServiceQC.cs
@@ -1,14 +1,14 @@
using System.Collections.Concurrent;
using System.Text.RegularExpressions;
-using Data.Models.Configuration.QueueCleaner;
-using Common.CustomDataTypes;
-using Data.Enums;
-using Data.Models.Deluge.Response;
-using Infrastructure.Extensions;
-using Infrastructure.Verticals.Context;
+using Cleanuparr.Domain.Entities;
+using Cleanuparr.Domain.Entities.Deluge.Response;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Extensions;
+using Cleanuparr.Infrastructure.Features.Context;
+using Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Verticals.DownloadClient.Deluge;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient.Deluge;
public partial class DelugeService
{
diff --git a/code/Infrastructure/Verticals/DownloadClient/Deluge/Extensions/DelugeExtensions.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/Extensions/DelugeExtensions.cs
similarity index 86%
rename from code/Infrastructure/Verticals/DownloadClient/Deluge/Extensions/DelugeExtensions.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/Extensions/DelugeExtensions.cs
index 9375c59d..a557b742 100644
--- a/code/Infrastructure/Verticals/DownloadClient/Deluge/Extensions/DelugeExtensions.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/Extensions/DelugeExtensions.cs
@@ -1,6 +1,6 @@
using Newtonsoft.Json;
-namespace Infrastructure.Verticals.DownloadClient.Deluge.Extensions;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient.Deluge.Extensions;
internal static class DelugeExtensions
{
diff --git a/code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/IDelugeService.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/IDelugeService.cs
new file mode 100644
index 00000000..83ca3894
--- /dev/null
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Deluge/IDelugeService.cs
@@ -0,0 +1,5 @@
+namespace Cleanuparr.Infrastructure.Features.DownloadClient.Deluge;
+
+public interface IDelugeService : IDownloadService
+{
+}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/DownloadClient/DownloadCheckResult.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/DownloadCheckResult.cs
similarity index 81%
rename from code/Infrastructure/Verticals/DownloadClient/DownloadCheckResult.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/DownloadCheckResult.cs
index 0fd6f36c..1531e949 100644
--- a/code/Infrastructure/Verticals/DownloadClient/DownloadCheckResult.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/DownloadCheckResult.cs
@@ -1,6 +1,6 @@
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
-namespace Infrastructure.Verticals.DownloadClient;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient;
public sealed record DownloadCheckResult
{
diff --git a/code/Infrastructure/Verticals/DownloadClient/DownloadService.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/DownloadService.cs
similarity index 93%
rename from code/Infrastructure/Verticals/DownloadClient/DownloadService.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/DownloadService.cs
index 7e7fa0dd..04c4da94 100644
--- a/code/Infrastructure/Verticals/DownloadClient/DownloadService.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/DownloadService.cs
@@ -1,24 +1,22 @@
-using Common.Configuration;
-using Data.Models.Configuration.DownloadCleaner;
-using Data.Models.Configuration.QueueCleaner;
-using Common.CustomDataTypes;
-using Common.Enums;
-using Common.Helpers;
-using Data;
-using Data.Enums;
-using Data.Models.Cache;
-using Infrastructure.Events;
-using Infrastructure.Helpers;
-using Infrastructure.Http;
+using Cleanuparr.Domain.Entities;
+using Cleanuparr.Domain.Entities.Cache;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Events;
+using Cleanuparr.Infrastructure.Features.ContentBlocker;
+using Cleanuparr.Infrastructure.Features.Context;
+using Cleanuparr.Infrastructure.Features.Files;
+using Cleanuparr.Infrastructure.Features.ItemStriker;
+using Cleanuparr.Infrastructure.Helpers;
+using Cleanuparr.Infrastructure.Http;
+using Cleanuparr.Persistence.Models.Configuration;
+using Cleanuparr.Persistence.Models.Configuration.DownloadCleaner;
+using Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
+using Cleanuparr.Shared.Helpers;
using Infrastructure.Interceptors;
-using Infrastructure.Verticals.ContentBlocker;
-using Infrastructure.Verticals.Context;
-using Infrastructure.Verticals.Files;
-using Infrastructure.Verticals.ItemStriker;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Verticals.DownloadClient;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient;
public class HealthCheckResult
{
diff --git a/code/Infrastructure/Verticals/DownloadClient/DownloadServiceFactory.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/DownloadServiceFactory.cs
similarity index 88%
rename from code/Infrastructure/Verticals/DownloadClient/DownloadServiceFactory.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/DownloadServiceFactory.cs
index ff0d3ad2..b01cea37 100644
--- a/code/Infrastructure/Verticals/DownloadClient/DownloadServiceFactory.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/DownloadServiceFactory.cs
@@ -1,19 +1,19 @@
-using Common.Configuration;
-using Common.Enums;
-using Infrastructure.Events;
-using Infrastructure.Http;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Events;
+using Cleanuparr.Infrastructure.Features.ContentBlocker;
+using Cleanuparr.Infrastructure.Features.Files;
+using Cleanuparr.Infrastructure.Features.ItemStriker;
+using Cleanuparr.Infrastructure.Http;
+using Cleanuparr.Persistence.Models.Configuration;
using Infrastructure.Interceptors;
-using Infrastructure.Verticals.ContentBlocker;
-using Infrastructure.Verticals.DownloadClient.Deluge;
-using Infrastructure.Verticals.DownloadClient.QBittorrent;
-using Infrastructure.Verticals.DownloadClient.Transmission;
-using Infrastructure.Verticals.Files;
-using Infrastructure.Verticals.ItemStriker;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
+using DelugeService = Cleanuparr.Infrastructure.Features.DownloadClient.Deluge.DelugeService;
+using QBitService = Cleanuparr.Infrastructure.Features.DownloadClient.QBittorrent.QBitService;
+using TransmissionService = Cleanuparr.Infrastructure.Features.DownloadClient.Transmission.TransmissionService;
-namespace Infrastructure.Verticals.DownloadClient;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient;
///
/// Factory responsible for creating download client service instances
diff --git a/code/Infrastructure/Verticals/DownloadClient/IDownloadService.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/IDownloadService.cs
similarity index 94%
rename from code/Infrastructure/Verticals/DownloadClient/IDownloadService.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/IDownloadService.cs
index ee5ec770..8090d5ae 100644
--- a/code/Infrastructure/Verticals/DownloadClient/IDownloadService.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/IDownloadService.cs
@@ -1,8 +1,7 @@
-using Common.Configuration;
-using Common.Enums;
-using Data.Models.Configuration.DownloadCleaner;
+using Cleanuparr.Persistence.Models.Configuration;
+using Cleanuparr.Persistence.Models.Configuration.DownloadCleaner;
-namespace Infrastructure.Verticals.DownloadClient;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient;
public interface IDownloadService : IDisposable
{
diff --git a/code/Cleanuparr.Infrastructure/Features/DownloadClient/QBittorrent/IQBitService.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/QBittorrent/IQBitService.cs
new file mode 100644
index 00000000..bb11438f
--- /dev/null
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/QBittorrent/IQBitService.cs
@@ -0,0 +1,5 @@
+namespace Cleanuparr.Infrastructure.Features.DownloadClient.QBittorrent;
+
+public interface IQBitService : IDownloadService, IDisposable
+{
+}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/DownloadClient/QBittorrent/QBitService.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/QBittorrent/QBitService.cs
similarity index 91%
rename from code/Infrastructure/Verticals/DownloadClient/QBittorrent/QBitService.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/QBittorrent/QBitService.cs
index 9385d741..3d593d85 100644
--- a/code/Infrastructure/Verticals/DownloadClient/QBittorrent/QBitService.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/QBittorrent/QBitService.cs
@@ -1,16 +1,15 @@
-using Common.Configuration;
-using Data;
-using Infrastructure.Http;
+using Cleanuparr.Infrastructure.Events;
+using Cleanuparr.Infrastructure.Features.ContentBlocker;
+using Cleanuparr.Infrastructure.Features.Files;
+using Cleanuparr.Infrastructure.Features.ItemStriker;
+using Cleanuparr.Infrastructure.Http;
+using Cleanuparr.Persistence.Models.Configuration;
using Infrastructure.Interceptors;
-using Infrastructure.Verticals.ContentBlocker;
-using Infrastructure.Verticals.Files;
-using Infrastructure.Verticals.ItemStriker;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
using QBittorrent.Client;
-using Infrastructure.Events;
-namespace Infrastructure.Verticals.DownloadClient.QBittorrent;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient.QBittorrent;
public partial class QBitService : DownloadService, IQBitService
{
diff --git a/code/Infrastructure/Verticals/DownloadClient/QBittorrent/QBitServiceDC.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/QBittorrent/QBitServiceDC.cs
similarity index 97%
rename from code/Infrastructure/Verticals/DownloadClient/QBittorrent/QBitServiceDC.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/QBittorrent/QBitServiceDC.cs
index 34d1129c..eb929b17 100644
--- a/code/Infrastructure/Verticals/DownloadClient/QBittorrent/QBitServiceDC.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/QBittorrent/QBitServiceDC.cs
@@ -1,12 +1,11 @@
-using Common.Attributes;
-using Data.Models.Configuration.DownloadCleaner;
-using Data.Enums;
-using Infrastructure.Extensions;
-using Infrastructure.Verticals.Context;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Extensions;
+using Cleanuparr.Infrastructure.Features.Context;
+using Cleanuparr.Persistence.Models.Configuration.DownloadCleaner;
using Microsoft.Extensions.Logging;
using QBittorrent.Client;
-namespace Infrastructure.Verticals.DownloadClient.QBittorrent;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient.QBittorrent;
public partial class QBitService
{
diff --git a/code/Infrastructure/Verticals/DownloadClient/QBittorrent/QBitServiceQC.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/QBittorrent/QBitServiceQC.cs
similarity index 96%
rename from code/Infrastructure/Verticals/DownloadClient/QBittorrent/QBitServiceQC.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/QBittorrent/QBitServiceQC.cs
index 3bc25a8c..f7aa1453 100644
--- a/code/Infrastructure/Verticals/DownloadClient/QBittorrent/QBitServiceQC.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/QBittorrent/QBitServiceQC.cs
@@ -1,14 +1,14 @@
using System.Collections.Concurrent;
using System.Text.RegularExpressions;
-using Data.Models.Configuration.QueueCleaner;
-using Common.CustomDataTypes;
-using Data.Enums;
-using Infrastructure.Extensions;
-using Infrastructure.Verticals.Context;
+using Cleanuparr.Domain.Entities;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Extensions;
+using Cleanuparr.Infrastructure.Features.Context;
+using Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
using Microsoft.Extensions.Logging;
using QBittorrent.Client;
-namespace Infrastructure.Verticals.DownloadClient.QBittorrent;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient.QBittorrent;
public partial class QBitService
{
diff --git a/code/Infrastructure/Verticals/DownloadClient/SeedingCheckResult.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/SeedingCheckResult.cs
similarity index 57%
rename from code/Infrastructure/Verticals/DownloadClient/SeedingCheckResult.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/SeedingCheckResult.cs
index 802481c6..105e58cd 100644
--- a/code/Infrastructure/Verticals/DownloadClient/SeedingCheckResult.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/SeedingCheckResult.cs
@@ -1,9 +1,10 @@
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
-namespace Infrastructure.Verticals.DownloadClient;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient;
public sealed record SeedingCheckResult
{
public bool ShouldClean { get; set; }
+
public CleanReason Reason { get; set; }
}
\ No newline at end of file
diff --git a/code/Cleanuparr.Infrastructure/Features/DownloadClient/Transmission/ITransmissionService.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Transmission/ITransmissionService.cs
new file mode 100644
index 00000000..94dc0c43
--- /dev/null
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Transmission/ITransmissionService.cs
@@ -0,0 +1,5 @@
+namespace Cleanuparr.Infrastructure.Features.DownloadClient.Transmission;
+
+public interface ITransmissionService : IDownloadService
+{
+}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/DownloadClient/Transmission/TransmissionService.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Transmission/TransmissionService.cs
similarity index 94%
rename from code/Infrastructure/Verticals/DownloadClient/Transmission/TransmissionService.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/Transmission/TransmissionService.cs
index 0ba971ed..642a7c9d 100644
--- a/code/Infrastructure/Verticals/DownloadClient/Transmission/TransmissionService.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Transmission/TransmissionService.cs
@@ -1,16 +1,16 @@
-using Common.Configuration;
-using Infrastructure.Events;
+using Cleanuparr.Infrastructure.Events;
+using Cleanuparr.Infrastructure.Features.ContentBlocker;
+using Cleanuparr.Infrastructure.Features.Files;
+using Cleanuparr.Infrastructure.Features.ItemStriker;
+using Cleanuparr.Infrastructure.Http;
+using Cleanuparr.Persistence.Models.Configuration;
using Infrastructure.Interceptors;
-using Infrastructure.Verticals.ContentBlocker;
-using Infrastructure.Verticals.Files;
-using Infrastructure.Verticals.ItemStriker;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
-using Infrastructure.Http;
using Transmission.API.RPC;
using Transmission.API.RPC.Entity;
-namespace Infrastructure.Verticals.DownloadClient.Transmission;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient.Transmission;
public partial class TransmissionService : DownloadService, ITransmissionService
{
diff --git a/code/Infrastructure/Verticals/DownloadClient/Transmission/TransmissionServiceDC.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Transmission/TransmissionServiceDC.cs
similarity index 96%
rename from code/Infrastructure/Verticals/DownloadClient/Transmission/TransmissionServiceDC.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/Transmission/TransmissionServiceDC.cs
index 80a54180..ff00a240 100644
--- a/code/Infrastructure/Verticals/DownloadClient/Transmission/TransmissionServiceDC.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Transmission/TransmissionServiceDC.cs
@@ -1,11 +1,11 @@
-using Data.Models.Configuration.DownloadCleaner;
-using Data.Enums;
-using Infrastructure.Extensions;
-using Infrastructure.Verticals.Context;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Extensions;
+using Cleanuparr.Infrastructure.Features.Context;
+using Cleanuparr.Persistence.Models.Configuration.DownloadCleaner;
using Microsoft.Extensions.Logging;
using Transmission.API.RPC.Entity;
-namespace Infrastructure.Verticals.DownloadClient.Transmission;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient.Transmission;
public partial class TransmissionService
{
diff --git a/code/Infrastructure/Verticals/DownloadClient/Transmission/TransmissionServiceQC.cs b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Transmission/TransmissionServiceQC.cs
similarity index 96%
rename from code/Infrastructure/Verticals/DownloadClient/Transmission/TransmissionServiceQC.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadClient/Transmission/TransmissionServiceQC.cs
index e3fbe55d..a8bd704d 100644
--- a/code/Infrastructure/Verticals/DownloadClient/Transmission/TransmissionServiceQC.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadClient/Transmission/TransmissionServiceQC.cs
@@ -1,15 +1,15 @@
using System.Collections.Concurrent;
using System.Text.RegularExpressions;
-using Data.Models.Configuration.QueueCleaner;
-using Common.CustomDataTypes;
-using Data.Enums;
-using Infrastructure.Extensions;
-using Infrastructure.Verticals.Context;
+using Cleanuparr.Domain.Entities;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Extensions;
+using Cleanuparr.Infrastructure.Features.Context;
+using Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
using Microsoft.Extensions.Logging;
using Transmission.API.RPC.Arguments;
using Transmission.API.RPC.Entity;
-namespace Infrastructure.Verticals.DownloadClient.Transmission;
+namespace Cleanuparr.Infrastructure.Features.DownloadClient.Transmission;
public partial class TransmissionService
{
diff --git a/code/Infrastructure/Verticals/DownloadRemover/Consumers/DownloadRemoverConsumer.cs b/code/Cleanuparr.Infrastructure/Features/DownloadRemover/Consumers/DownloadRemoverConsumer.cs
similarity index 80%
rename from code/Infrastructure/Verticals/DownloadRemover/Consumers/DownloadRemoverConsumer.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadRemover/Consumers/DownloadRemoverConsumer.cs
index 37fdd5ab..a04f4e08 100644
--- a/code/Infrastructure/Verticals/DownloadRemover/Consumers/DownloadRemoverConsumer.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadRemover/Consumers/DownloadRemoverConsumer.cs
@@ -1,10 +1,10 @@
-using Data.Models.Arr;
-using Infrastructure.Verticals.DownloadRemover.Interfaces;
-using Infrastructure.Verticals.DownloadRemover.Models;
+using Cleanuparr.Infrastructure.Features.DownloadRemover.Interfaces;
+using Cleanuparr.Infrastructure.Features.DownloadRemover.Models;
+using Data.Models.Arr;
using MassTransit;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Verticals.DownloadRemover.Consumers;
+namespace Cleanuparr.Infrastructure.Features.DownloadRemover.Consumers;
public class DownloadRemoverConsumer : IConsumer>
where T : SearchItem
diff --git a/code/Cleanuparr.Infrastructure/Features/DownloadRemover/Interfaces/IQueueItemRemover.cs b/code/Cleanuparr.Infrastructure/Features/DownloadRemover/Interfaces/IQueueItemRemover.cs
new file mode 100644
index 00000000..bee5624c
--- /dev/null
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadRemover/Interfaces/IQueueItemRemover.cs
@@ -0,0 +1,9 @@
+using Cleanuparr.Infrastructure.Features.DownloadRemover.Models;
+using Data.Models.Arr;
+
+namespace Cleanuparr.Infrastructure.Features.DownloadRemover.Interfaces;
+
+public interface IQueueItemRemover
+{
+ Task RemoveQueueItemAsync(QueueItemRemoveRequest request) where T : SearchItem;
+}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/DownloadRemover/Models/QueueItemRemoveRequest.cs b/code/Cleanuparr.Infrastructure/Features/DownloadRemover/Models/QueueItemRemoveRequest.cs
similarity index 75%
rename from code/Infrastructure/Verticals/DownloadRemover/Models/QueueItemRemoveRequest.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadRemover/Models/QueueItemRemoveRequest.cs
index bf1616ba..05a7a9b5 100644
--- a/code/Infrastructure/Verticals/DownloadRemover/Models/QueueItemRemoveRequest.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadRemover/Models/QueueItemRemoveRequest.cs
@@ -1,9 +1,9 @@
-using Data.Models.Configuration.Arr;
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Persistence.Models.Configuration.Arr;
using Data.Models.Arr;
using Data.Models.Arr.Queue;
-namespace Infrastructure.Verticals.DownloadRemover.Models;
+namespace Cleanuparr.Infrastructure.Features.DownloadRemover.Models;
public sealed record QueueItemRemoveRequest
where T : SearchItem
diff --git a/code/Infrastructure/Verticals/DownloadRemover/QueueItemRemover.cs b/code/Cleanuparr.Infrastructure/Features/DownloadRemover/QueueItemRemover.cs
similarity index 82%
rename from code/Infrastructure/Verticals/DownloadRemover/QueueItemRemover.cs
rename to code/Cleanuparr.Infrastructure/Features/DownloadRemover/QueueItemRemover.cs
index 451ff771..e0961efd 100644
--- a/code/Infrastructure/Verticals/DownloadRemover/QueueItemRemover.cs
+++ b/code/Cleanuparr.Infrastructure/Features/DownloadRemover/QueueItemRemover.cs
@@ -1,18 +1,18 @@
-using Data.Models.Configuration.Arr;
-using Data;
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Events;
+using Cleanuparr.Infrastructure.Features.Arr;
+using Cleanuparr.Infrastructure.Features.Context;
+using Cleanuparr.Infrastructure.Features.DownloadRemover.Interfaces;
+using Cleanuparr.Infrastructure.Features.DownloadRemover.Models;
+using Cleanuparr.Infrastructure.Helpers;
+using Cleanuparr.Persistence;
+using Cleanuparr.Persistence.Models.Configuration.Arr;
using Data.Models.Arr;
using Data.Models.Arr.Queue;
-using Infrastructure.Events;
-using Infrastructure.Helpers;
-using Infrastructure.Verticals.Arr;
-using Infrastructure.Verticals.Context;
-using Infrastructure.Verticals.DownloadRemover.Interfaces;
-using Infrastructure.Verticals.DownloadRemover.Models;
-using Microsoft.Extensions.Caching.Memory;
using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Caching.Memory;
-namespace Infrastructure.Verticals.DownloadRemover;
+namespace Cleanuparr.Infrastructure.Features.DownloadRemover;
public sealed class QueueItemRemover : IQueueItemRemover
{
diff --git a/code/Infrastructure/Verticals/Files/HardLinkFileService.cs b/code/Cleanuparr.Infrastructure/Features/Files/HardLinkFileService.cs
similarity index 94%
rename from code/Infrastructure/Verticals/Files/HardLinkFileService.cs
rename to code/Cleanuparr.Infrastructure/Features/Files/HardLinkFileService.cs
index 0f4c3e14..e036d421 100644
--- a/code/Infrastructure/Verticals/Files/HardLinkFileService.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Files/HardLinkFileService.cs
@@ -1,7 +1,8 @@
using System.Runtime.InteropServices;
+using Infrastructure.Verticals.Files;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Verticals.Files;
+namespace Cleanuparr.Infrastructure.Features.Files;
public class HardLinkFileService : IHardLinkFileService
{
diff --git a/code/Infrastructure/Verticals/Files/IHardLinkFileService.cs b/code/Cleanuparr.Infrastructure/Features/Files/IHardLinkFileService.cs
similarity index 93%
rename from code/Infrastructure/Verticals/Files/IHardLinkFileService.cs
rename to code/Cleanuparr.Infrastructure/Features/Files/IHardLinkFileService.cs
index 1639c57c..bc3d48d6 100644
--- a/code/Infrastructure/Verticals/Files/IHardLinkFileService.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Files/IHardLinkFileService.cs
@@ -1,4 +1,4 @@
-namespace Infrastructure.Verticals.Files;
+namespace Cleanuparr.Infrastructure.Features.Files;
public interface IHardLinkFileService
{
diff --git a/code/Infrastructure/Verticals/Files/UnixHardLinkFileService.cs b/code/Cleanuparr.Infrastructure/Features/Files/UnixHardLinkFileService.cs
similarity index 98%
rename from code/Infrastructure/Verticals/Files/UnixHardLinkFileService.cs
rename to code/Cleanuparr.Infrastructure/Features/Files/UnixHardLinkFileService.cs
index 7720b640..faa8ccc0 100644
--- a/code/Infrastructure/Verticals/Files/UnixHardLinkFileService.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Files/UnixHardLinkFileService.cs
@@ -2,7 +2,7 @@
using Microsoft.Extensions.Logging;
using Mono.Unix.Native;
-namespace Infrastructure.Verticals.Files;
+namespace Cleanuparr.Infrastructure.Features.Files;
public class UnixHardLinkFileService : IHardLinkFileService, IDisposable
{
diff --git a/code/Infrastructure/Verticals/Files/WindowsHardLinkFileService.cs b/code/Cleanuparr.Infrastructure/Features/Files/WindowsHardLinkFileService.cs
similarity index 98%
rename from code/Infrastructure/Verticals/Files/WindowsHardLinkFileService.cs
rename to code/Cleanuparr.Infrastructure/Features/Files/WindowsHardLinkFileService.cs
index fde441db..5eb72694 100644
--- a/code/Infrastructure/Verticals/Files/WindowsHardLinkFileService.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Files/WindowsHardLinkFileService.cs
@@ -1,5 +1,6 @@
using System.Collections.Concurrent;
using System.Runtime.InteropServices;
+using Cleanuparr.Infrastructure.Features.Files;
using Microsoft.Extensions.Logging;
using Microsoft.Win32.SafeHandles;
diff --git a/code/Infrastructure/Verticals/ItemStriker/IStriker.cs b/code/Cleanuparr.Infrastructure/Features/ItemStriker/IStriker.cs
similarity index 59%
rename from code/Infrastructure/Verticals/ItemStriker/IStriker.cs
rename to code/Cleanuparr.Infrastructure/Features/ItemStriker/IStriker.cs
index acb3b4d5..5018c700 100644
--- a/code/Infrastructure/Verticals/ItemStriker/IStriker.cs
+++ b/code/Cleanuparr.Infrastructure/Features/ItemStriker/IStriker.cs
@@ -1,6 +1,6 @@
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
-namespace Infrastructure.Verticals.ItemStriker;
+namespace Cleanuparr.Infrastructure.Features.ItemStriker;
public interface IStriker
{
diff --git a/code/Infrastructure/Verticals/ItemStriker/Striker.cs b/code/Cleanuparr.Infrastructure/Features/ItemStriker/Striker.cs
similarity index 89%
rename from code/Infrastructure/Verticals/ItemStriker/Striker.cs
rename to code/Cleanuparr.Infrastructure/Features/ItemStriker/Striker.cs
index e7ce0319..e68bfcae 100644
--- a/code/Infrastructure/Verticals/ItemStriker/Striker.cs
+++ b/code/Cleanuparr.Infrastructure/Features/ItemStriker/Striker.cs
@@ -1,13 +1,11 @@
-using Common.Helpers;
-using Data.Enums;
-using Infrastructure.Events;
-using Infrastructure.Helpers;
-using Infrastructure.Interceptors;
-using Infrastructure.Verticals.Context;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Events;
+using Cleanuparr.Infrastructure.Helpers;
+using Cleanuparr.Shared.Helpers;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Verticals.ItemStriker;
+namespace Cleanuparr.Infrastructure.Features.ItemStriker;
public sealed class Striker : IStriker
{
diff --git a/code/Infrastructure/Verticals/Jobs/GenericHandler.cs b/code/Cleanuparr.Infrastructure/Features/Jobs/GenericHandler.cs
similarity index 93%
rename from code/Infrastructure/Verticals/Jobs/GenericHandler.cs
rename to code/Cleanuparr.Infrastructure/Features/Jobs/GenericHandler.cs
index db518974..8f905c30 100644
--- a/code/Infrastructure/Verticals/Jobs/GenericHandler.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Jobs/GenericHandler.cs
@@ -1,25 +1,23 @@
-using Common.Configuration;
-using Common.Enums;
-using Data.Models.Configuration.Arr;
-using Data.Models.Configuration.DownloadCleaner;
-using Data.Models.Configuration.General;
-using Data.Models.Configuration.QueueCleaner;
-using Data;
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Events;
+using Cleanuparr.Infrastructure.Features.Arr;
+using Cleanuparr.Infrastructure.Features.Context;
+using Cleanuparr.Infrastructure.Features.DownloadClient;
+using Cleanuparr.Infrastructure.Features.DownloadRemover.Models;
+using Cleanuparr.Persistence;
+using Cleanuparr.Persistence.Models.Configuration;
+using Cleanuparr.Persistence.Models.Configuration.Arr;
+using Cleanuparr.Persistence.Models.Configuration.DownloadCleaner;
+using Cleanuparr.Persistence.Models.Configuration.General;
+using Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
using Data.Models.Arr;
using Data.Models.Arr.Queue;
-using Data.Models.Configuration.Arr;
-using Infrastructure.Events;
-using Infrastructure.Verticals.Arr;
-using Infrastructure.Verticals.Context;
-using Infrastructure.Verticals.DownloadClient;
-using Infrastructure.Verticals.DownloadRemover.Models;
using MassTransit;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Verticals.Jobs;
+namespace Cleanuparr.Infrastructure.Features.Jobs;
public abstract class GenericHandler : IHandler
{
diff --git a/code/Cleanuparr.Infrastructure/Features/Jobs/IHandler.cs b/code/Cleanuparr.Infrastructure/Features/Jobs/IHandler.cs
new file mode 100644
index 00000000..6cca13e0
--- /dev/null
+++ b/code/Cleanuparr.Infrastructure/Features/Jobs/IHandler.cs
@@ -0,0 +1,6 @@
+namespace Cleanuparr.Infrastructure.Features.Jobs;
+
+public interface IHandler
+{
+ Task ExecuteAsync();
+}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/Jobs/JobChainingListener.cs b/code/Cleanuparr.Infrastructure/Features/Jobs/JobChainingListener.cs
similarity index 95%
rename from code/Infrastructure/Verticals/Jobs/JobChainingListener.cs
rename to code/Cleanuparr.Infrastructure/Features/Jobs/JobChainingListener.cs
index 273f3b4d..009b1db1 100644
--- a/code/Infrastructure/Verticals/Jobs/JobChainingListener.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Jobs/JobChainingListener.cs
@@ -1,6 +1,6 @@
using Quartz;
-namespace Infrastructure.Verticals.Jobs;
+namespace Cleanuparr.Infrastructure.Features.Jobs;
public class JobChainingListener : IJobListener
{
diff --git a/code/Infrastructure/Verticals/Notifications/Apprise/ApprisePayload.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Apprise/ApprisePayload.cs
similarity index 88%
rename from code/Infrastructure/Verticals/Notifications/Apprise/ApprisePayload.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/Apprise/ApprisePayload.cs
index 74804297..d9150e5f 100644
--- a/code/Infrastructure/Verticals/Notifications/Apprise/ApprisePayload.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Apprise/ApprisePayload.cs
@@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations;
-namespace Infrastructure.Verticals.Notifications.Apprise;
+namespace Cleanuparr.Infrastructure.Features.Notifications.Apprise;
public sealed record ApprisePayload
{
diff --git a/code/Infrastructure/Verticals/Notifications/Apprise/AppriseProvider.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Apprise/AppriseProvider.cs
similarity index 92%
rename from code/Infrastructure/Verticals/Notifications/Apprise/AppriseProvider.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/Apprise/AppriseProvider.cs
index 3f981915..8a86c4d1 100644
--- a/code/Infrastructure/Verticals/Notifications/Apprise/AppriseProvider.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Apprise/AppriseProvider.cs
@@ -1,9 +1,11 @@
using System.Text;
-using Data.Models.Configuration.Notification;
-using Data;
+using Cleanuparr.Infrastructure.Features.Notifications.Models;
+using Cleanuparr.Persistence;
+using Cleanuparr.Persistence.Models.Configuration.Notification;
+using Infrastructure.Verticals.Notifications;
using Infrastructure.Verticals.Notifications.Models;
-namespace Infrastructure.Verticals.Notifications.Apprise;
+namespace Cleanuparr.Infrastructure.Features.Notifications.Apprise;
public sealed class AppriseProvider : NotificationProvider
{
diff --git a/code/Infrastructure/Verticals/Notifications/Apprise/AppriseProxy.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Apprise/AppriseProxy.cs
similarity index 87%
rename from code/Infrastructure/Verticals/Notifications/Apprise/AppriseProxy.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/Apprise/AppriseProxy.cs
index 19ca094b..bd9fc740 100644
--- a/code/Infrastructure/Verticals/Notifications/Apprise/AppriseProxy.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Apprise/AppriseProxy.cs
@@ -1,10 +1,10 @@
using System.Text;
-using Data.Models.Configuration.Notification;
-using Common.Helpers;
+using Cleanuparr.Persistence.Models.Configuration.Notification;
+using Cleanuparr.Shared.Helpers;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
-namespace Infrastructure.Verticals.Notifications.Apprise;
+namespace Cleanuparr.Infrastructure.Features.Notifications.Apprise;
public sealed class AppriseProxy : IAppriseProxy
{
diff --git a/code/Cleanuparr.Infrastructure/Features/Notifications/Apprise/IAppriseProxy.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Apprise/IAppriseProxy.cs
new file mode 100644
index 00000000..58d50e1a
--- /dev/null
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Apprise/IAppriseProxy.cs
@@ -0,0 +1,8 @@
+using Cleanuparr.Persistence.Models.Configuration.Notification;
+
+namespace Cleanuparr.Infrastructure.Features.Notifications.Apprise;
+
+public interface IAppriseProxy
+{
+ Task SendNotification(ApprisePayload payload, AppriseConfig config);
+}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/Notifications/Consumers/NotificationConsumer.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Consumers/NotificationConsumer.cs
similarity index 91%
rename from code/Infrastructure/Verticals/Notifications/Consumers/NotificationConsumer.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/Consumers/NotificationConsumer.cs
index 3d2344a0..55c36fb3 100644
--- a/code/Infrastructure/Verticals/Notifications/Consumers/NotificationConsumer.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Consumers/NotificationConsumer.cs
@@ -1,8 +1,9 @@
-using Infrastructure.Verticals.Notifications.Models;
+using Infrastructure.Verticals.Notifications;
+using Infrastructure.Verticals.Notifications.Models;
using MassTransit;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Verticals.Notifications.Consumers;
+namespace Cleanuparr.Infrastructure.Features.Notifications.Consumers;
public sealed class NotificationConsumer : IConsumer where T : Notification
{
diff --git a/code/Infrastructure/Verticals/Notifications/INotificationFactory.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/INotificationFactory.cs
similarity index 79%
rename from code/Infrastructure/Verticals/Notifications/INotificationFactory.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/INotificationFactory.cs
index 460354f7..a81c8fed 100644
--- a/code/Infrastructure/Verticals/Notifications/INotificationFactory.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/INotificationFactory.cs
@@ -1,4 +1,6 @@
-namespace Infrastructure.Verticals.Notifications;
+using Infrastructure.Verticals.Notifications;
+
+namespace Cleanuparr.Infrastructure.Features.Notifications;
public interface INotificationFactory
{
diff --git a/code/Infrastructure/Verticals/Notifications/INotificationProvider.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/INotificationProvider.cs
similarity index 85%
rename from code/Infrastructure/Verticals/Notifications/INotificationProvider.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/INotificationProvider.cs
index e5d60d6b..437af5b6 100644
--- a/code/Infrastructure/Verticals/Notifications/INotificationProvider.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/INotificationProvider.cs
@@ -1,7 +1,7 @@
-using Data.Models.Configuration.Notification;
+using Cleanuparr.Persistence.Models.Configuration.Notification;
using Infrastructure.Verticals.Notifications.Models;
-namespace Infrastructure.Verticals.Notifications;
+namespace Cleanuparr.Infrastructure.Features.Notifications;
public interface INotificationProvider : INotificationProvider
where T : NotificationConfig
diff --git a/code/Infrastructure/Verticals/Notifications/INotificationPublisher.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/INotificationPublisher.cs
similarity index 80%
rename from code/Infrastructure/Verticals/Notifications/INotificationPublisher.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/INotificationPublisher.cs
index 2c3ed654..47713553 100644
--- a/code/Infrastructure/Verticals/Notifications/INotificationPublisher.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/INotificationPublisher.cs
@@ -1,6 +1,6 @@
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
-namespace Infrastructure.Verticals.Notifications;
+namespace Cleanuparr.Infrastructure.Features.Notifications;
public interface INotificationPublisher
{
diff --git a/code/Infrastructure/Verticals/Notifications/Models/ArrNotification.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/ArrNotification.cs
similarity index 62%
rename from code/Infrastructure/Verticals/Notifications/Models/ArrNotification.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/Models/ArrNotification.cs
index dd340cba..0ee5ed80 100644
--- a/code/Infrastructure/Verticals/Notifications/Models/ArrNotification.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/ArrNotification.cs
@@ -1,6 +1,7 @@
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
+using Infrastructure.Verticals.Notifications.Models;
-namespace Infrastructure.Verticals.Notifications.Models;
+namespace Cleanuparr.Infrastructure.Features.Notifications.Models;
public record ArrNotification : Notification
{
diff --git a/code/Infrastructure/Verticals/Notifications/Models/CategoryChangedNotification.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/CategoryChangedNotification.cs
similarity index 100%
rename from code/Infrastructure/Verticals/Notifications/Models/CategoryChangedNotification.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/Models/CategoryChangedNotification.cs
diff --git a/code/Infrastructure/Verticals/Notifications/Models/DownloadCleanedNotification.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/DownloadCleanedNotification.cs
similarity index 100%
rename from code/Infrastructure/Verticals/Notifications/Models/DownloadCleanedNotification.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/Models/DownloadCleanedNotification.cs
diff --git a/code/Cleanuparr.Infrastructure/Features/Notifications/Models/FailedImportStrikeNotification.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/FailedImportStrikeNotification.cs
new file mode 100644
index 00000000..0c24c85e
--- /dev/null
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/FailedImportStrikeNotification.cs
@@ -0,0 +1,7 @@
+using Cleanuparr.Infrastructure.Features.Notifications.Models;
+
+namespace Infrastructure.Verticals.Notifications.Models;
+
+public sealed record FailedImportStrikeNotification : ArrNotification
+{
+}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/Notifications/Models/Notification.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/Notification.cs
similarity index 100%
rename from code/Infrastructure/Verticals/Notifications/Models/Notification.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/Models/Notification.cs
diff --git a/code/Infrastructure/Verticals/Notifications/Models/NotificationField.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/NotificationField.cs
similarity index 100%
rename from code/Infrastructure/Verticals/Notifications/Models/NotificationField.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/Models/NotificationField.cs
diff --git a/code/Infrastructure/Verticals/Notifications/Models/NotificationLevel.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/NotificationLevel.cs
similarity index 100%
rename from code/Infrastructure/Verticals/Notifications/Models/NotificationLevel.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/Models/NotificationLevel.cs
diff --git a/code/Cleanuparr.Infrastructure/Features/Notifications/Models/QueueItemDeletedNotification.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/QueueItemDeletedNotification.cs
new file mode 100644
index 00000000..656ff236
--- /dev/null
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/QueueItemDeletedNotification.cs
@@ -0,0 +1,7 @@
+using Cleanuparr.Infrastructure.Features.Notifications.Models;
+
+namespace Infrastructure.Verticals.Notifications.Models;
+
+public sealed record QueueItemDeletedNotification : ArrNotification
+{
+}
\ No newline at end of file
diff --git a/code/Cleanuparr.Infrastructure/Features/Notifications/Models/SlowStrikeNotification.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/SlowStrikeNotification.cs
new file mode 100644
index 00000000..030de617
--- /dev/null
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/SlowStrikeNotification.cs
@@ -0,0 +1,7 @@
+using Cleanuparr.Infrastructure.Features.Notifications.Models;
+
+namespace Infrastructure.Verticals.Notifications.Models;
+
+public sealed record SlowStrikeNotification : ArrNotification
+{
+}
\ No newline at end of file
diff --git a/code/Cleanuparr.Infrastructure/Features/Notifications/Models/StalledStrikeNotification.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/StalledStrikeNotification.cs
new file mode 100644
index 00000000..34bed2e7
--- /dev/null
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Models/StalledStrikeNotification.cs
@@ -0,0 +1,7 @@
+using Cleanuparr.Infrastructure.Features.Notifications.Models;
+
+namespace Infrastructure.Verticals.Notifications.Models;
+
+public sealed record StalledStrikeNotification : ArrNotification
+{
+}
\ No newline at end of file
diff --git a/code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/INotifiarrProxy.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/INotifiarrProxy.cs
new file mode 100644
index 00000000..155146d5
--- /dev/null
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/INotifiarrProxy.cs
@@ -0,0 +1,8 @@
+using Cleanuparr.Persistence.Models.Configuration.Notification;
+
+namespace Cleanuparr.Infrastructure.Features.Notifications.Notifiarr;
+
+public interface INotifiarrProxy
+{
+ Task SendNotification(NotifiarrPayload payload, NotifiarrConfig config);
+}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/Notifications/Notifiarr/NotifiarrException.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/NotifiarrException.cs
similarity index 76%
rename from code/Infrastructure/Verticals/Notifications/Notifiarr/NotifiarrException.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/NotifiarrException.cs
index 10ca5908..c28c60ae 100644
--- a/code/Infrastructure/Verticals/Notifications/Notifiarr/NotifiarrException.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/NotifiarrException.cs
@@ -1,4 +1,4 @@
-namespace Infrastructure.Verticals.Notifications.Notifiarr;
+namespace Cleanuparr.Infrastructure.Features.Notifications.Notifiarr;
public class NotifiarrException : Exception
{
diff --git a/code/Infrastructure/Verticals/Notifications/Notifiarr/NotifiarrPayload.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/NotifiarrPayload.cs
similarity index 94%
rename from code/Infrastructure/Verticals/Notifications/Notifiarr/NotifiarrPayload.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/NotifiarrPayload.cs
index 4a1d8967..7da2a3f7 100644
--- a/code/Infrastructure/Verticals/Notifications/Notifiarr/NotifiarrPayload.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/NotifiarrPayload.cs
@@ -1,4 +1,4 @@
-namespace Infrastructure.Verticals.Notifications.Notifiarr;
+namespace Cleanuparr.Infrastructure.Features.Notifications.Notifiarr;
public class NotifiarrPayload
{
diff --git a/code/Infrastructure/Verticals/Notifications/Notifiarr/NotifiarrProvider.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/NotifiarrProvider.cs
similarity index 94%
rename from code/Infrastructure/Verticals/Notifications/Notifiarr/NotifiarrProvider.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/NotifiarrProvider.cs
index cd0f2e9e..72ad02ff 100644
--- a/code/Infrastructure/Verticals/Notifications/Notifiarr/NotifiarrProvider.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/NotifiarrProvider.cs
@@ -1,9 +1,11 @@
-using Data.Models.Configuration.Notification;
-using Data;
+using Cleanuparr.Infrastructure.Features.Notifications.Models;
+using Cleanuparr.Persistence;
+using Cleanuparr.Persistence.Models.Configuration.Notification;
+using Infrastructure.Verticals.Notifications;
using Infrastructure.Verticals.Notifications.Models;
using Mapster;
-namespace Infrastructure.Verticals.Notifications.Notifiarr;
+namespace Cleanuparr.Infrastructure.Features.Notifications.Notifiarr;
public class NotifiarrProvider : NotificationProvider
{
diff --git a/code/Infrastructure/Verticals/Notifications/Notifiarr/NotifiarrProxy.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/NotifiarrProxy.cs
similarity index 92%
rename from code/Infrastructure/Verticals/Notifications/Notifiarr/NotifiarrProxy.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/NotifiarrProxy.cs
index 02a5e3cb..4606cf51 100644
--- a/code/Infrastructure/Verticals/Notifications/Notifiarr/NotifiarrProxy.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/Notifiarr/NotifiarrProxy.cs
@@ -1,11 +1,11 @@
using System.Text;
-using Data.Models.Configuration.Notification;
-using Common.Helpers;
+using Cleanuparr.Persistence.Models.Configuration.Notification;
+using Cleanuparr.Shared.Helpers;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
-namespace Infrastructure.Verticals.Notifications.Notifiarr;
+namespace Cleanuparr.Infrastructure.Features.Notifications.Notifiarr;
public sealed class NotifiarrProxy : INotifiarrProxy
{
diff --git a/code/Infrastructure/Verticals/Notifications/NotificationFactory.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/NotificationFactory.cs
similarity index 96%
rename from code/Infrastructure/Verticals/Notifications/NotificationFactory.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/NotificationFactory.cs
index a3676837..208900ae 100644
--- a/code/Infrastructure/Verticals/Notifications/NotificationFactory.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/NotificationFactory.cs
@@ -1,4 +1,4 @@
-namespace Infrastructure.Verticals.Notifications;
+namespace Cleanuparr.Infrastructure.Features.Notifications;
public class NotificationFactory : INotificationFactory
{
diff --git a/code/Infrastructure/Verticals/Notifications/NotificationProvider.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/NotificationProvider.cs
similarity index 89%
rename from code/Infrastructure/Verticals/Notifications/NotificationProvider.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/NotificationProvider.cs
index b634c095..e11c9806 100644
--- a/code/Infrastructure/Verticals/Notifications/NotificationProvider.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/NotificationProvider.cs
@@ -1,8 +1,8 @@
-using Data.Models.Configuration.Notification;
+using Cleanuparr.Persistence.Models.Configuration.Notification;
using Infrastructure.Verticals.Notifications.Models;
using Microsoft.EntityFrameworkCore;
-namespace Infrastructure.Verticals.Notifications;
+namespace Cleanuparr.Infrastructure.Features.Notifications;
public abstract class NotificationProvider : INotificationProvider
where T : NotificationConfig
diff --git a/code/Infrastructure/Verticals/Notifications/NotificationPublisher.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/NotificationPublisher.cs
similarity index 96%
rename from code/Infrastructure/Verticals/Notifications/NotificationPublisher.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/NotificationPublisher.cs
index ba12dbbe..6f70ea70 100644
--- a/code/Infrastructure/Verticals/Notifications/NotificationPublisher.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/NotificationPublisher.cs
@@ -1,15 +1,16 @@
using System.Globalization;
-using Data.Models.Configuration.Arr;
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Features.Context;
+using Cleanuparr.Infrastructure.Features.Notifications.Models;
+using Cleanuparr.Persistence.Models.Configuration.Arr;
using Data.Models.Arr.Queue;
using Infrastructure.Interceptors;
-using Infrastructure.Verticals.Context;
using Infrastructure.Verticals.Notifications.Models;
using Mapster;
using MassTransit;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Verticals.Notifications;
+namespace Cleanuparr.Infrastructure.Features.Notifications;
public class NotificationPublisher : INotificationPublisher
{
diff --git a/code/Infrastructure/Verticals/Notifications/NotificationService.cs b/code/Cleanuparr.Infrastructure/Features/Notifications/NotificationService.cs
similarity index 98%
rename from code/Infrastructure/Verticals/Notifications/NotificationService.cs
rename to code/Cleanuparr.Infrastructure/Features/Notifications/NotificationService.cs
index d26b8f81..1c954a79 100644
--- a/code/Infrastructure/Verticals/Notifications/NotificationService.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Notifications/NotificationService.cs
@@ -1,3 +1,4 @@
+using Cleanuparr.Infrastructure.Features.Notifications;
using Infrastructure.Verticals.Notifications.Models;
using Microsoft.Extensions.Logging;
diff --git a/code/Infrastructure/Verticals/Security/AesEncryptionService.cs b/code/Cleanuparr.Infrastructure/Features/Security/AesEncryptionService.cs
similarity index 98%
rename from code/Infrastructure/Verticals/Security/AesEncryptionService.cs
rename to code/Cleanuparr.Infrastructure/Features/Security/AesEncryptionService.cs
index e01bc19f..e66fe23a 100644
--- a/code/Infrastructure/Verticals/Security/AesEncryptionService.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Security/AesEncryptionService.cs
@@ -1,9 +1,9 @@
using System.Security.Cryptography;
using System.Text;
-using Data;
+using Cleanuparr.Persistence;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Verticals.Security;
+namespace Cleanuparr.Infrastructure.Features.Security;
///
/// Provides AES-128 GCM encryption services for sensitive data using the application's encryption key.
diff --git a/code/Infrastructure/Verticals/Security/IEncryptionService.cs b/code/Cleanuparr.Infrastructure/Features/Security/IEncryptionService.cs
similarity index 94%
rename from code/Infrastructure/Verticals/Security/IEncryptionService.cs
rename to code/Cleanuparr.Infrastructure/Features/Security/IEncryptionService.cs
index 5b7a993a..d133b0cc 100644
--- a/code/Infrastructure/Verticals/Security/IEncryptionService.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Security/IEncryptionService.cs
@@ -1,4 +1,4 @@
-namespace Infrastructure.Verticals.Security;
+namespace Cleanuparr.Infrastructure.Features.Security;
///
/// Provides encryption and decryption services for sensitive data.
diff --git a/code/Infrastructure/Verticals/Security/SensitiveDataJsonConverter.cs b/code/Cleanuparr.Infrastructure/Features/Security/SensitiveDataJsonConverter.cs
similarity index 98%
rename from code/Infrastructure/Verticals/Security/SensitiveDataJsonConverter.cs
rename to code/Cleanuparr.Infrastructure/Features/Security/SensitiveDataJsonConverter.cs
index bcdca1bb..81cc94ea 100644
--- a/code/Infrastructure/Verticals/Security/SensitiveDataJsonConverter.cs
+++ b/code/Cleanuparr.Infrastructure/Features/Security/SensitiveDataJsonConverter.cs
@@ -2,7 +2,7 @@ using System.Text.Json;
using System.Text.Json.Serialization;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Verticals.Security;
+namespace Cleanuparr.Infrastructure.Features.Security;
///
/// Handles encryption and decryption of sensitive data during JSON serialization and deserialization.
diff --git a/code/Infrastructure/Health/ClientHealthChangedEventArgs.cs b/code/Cleanuparr.Infrastructure/Health/ClientHealthChangedEventArgs.cs
similarity index 97%
rename from code/Infrastructure/Health/ClientHealthChangedEventArgs.cs
rename to code/Cleanuparr.Infrastructure/Health/ClientHealthChangedEventArgs.cs
index 30e9892e..30f4bd63 100644
--- a/code/Infrastructure/Health/ClientHealthChangedEventArgs.cs
+++ b/code/Cleanuparr.Infrastructure/Health/ClientHealthChangedEventArgs.cs
@@ -1,4 +1,4 @@
-namespace Infrastructure.Health;
+namespace Cleanuparr.Infrastructure.Health;
///
/// Event arguments for client health changes
diff --git a/code/Infrastructure/Health/HealthCheckBackgroundService.cs b/code/Cleanuparr.Infrastructure/Health/HealthCheckBackgroundService.cs
similarity index 98%
rename from code/Infrastructure/Health/HealthCheckBackgroundService.cs
rename to code/Cleanuparr.Infrastructure/Health/HealthCheckBackgroundService.cs
index 57fd69fc..bc4b6719 100644
--- a/code/Infrastructure/Health/HealthCheckBackgroundService.cs
+++ b/code/Cleanuparr.Infrastructure/Health/HealthCheckBackgroundService.cs
@@ -1,7 +1,7 @@
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Health;
+namespace Cleanuparr.Infrastructure.Health;
///
/// Background service that periodically checks the health of all download clients
diff --git a/code/Infrastructure/Health/HealthCheckService.cs b/code/Cleanuparr.Infrastructure/Health/HealthCheckService.cs
similarity index 97%
rename from code/Infrastructure/Health/HealthCheckService.cs
rename to code/Cleanuparr.Infrastructure/Health/HealthCheckService.cs
index 625a03ff..7121f10c 100644
--- a/code/Infrastructure/Health/HealthCheckService.cs
+++ b/code/Cleanuparr.Infrastructure/Health/HealthCheckService.cs
@@ -1,11 +1,11 @@
-using Common.Enums;
-using Data;
-using Infrastructure.Verticals.DownloadClient;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Features.DownloadClient;
+using Cleanuparr.Persistence;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Health;
+namespace Cleanuparr.Infrastructure.Health;
///
/// Service for checking the health of download clients
diff --git a/code/Infrastructure/Health/HealthStatus.cs b/code/Cleanuparr.Infrastructure/Health/HealthStatus.cs
similarity index 88%
rename from code/Infrastructure/Health/HealthStatus.cs
rename to code/Cleanuparr.Infrastructure/Health/HealthStatus.cs
index ab3b3148..b5e26f94 100644
--- a/code/Infrastructure/Health/HealthStatus.cs
+++ b/code/Cleanuparr.Infrastructure/Health/HealthStatus.cs
@@ -1,4 +1,6 @@
-namespace Infrastructure.Health;
+using Cleanuparr.Domain.Enums;
+
+namespace Cleanuparr.Infrastructure.Health;
///
/// Represents the health status of a client
@@ -38,5 +40,5 @@ public class HealthStatus
///
/// Gets or sets the client type
///
- public Common.Enums.DownloadClientTypeName ClientTypeName { get; set; }
+ public DownloadClientTypeName ClientTypeName { get; set; }
}
diff --git a/code/Infrastructure/Health/HealthStatusBroadcaster.cs b/code/Cleanuparr.Infrastructure/Health/HealthStatusBroadcaster.cs
similarity index 98%
rename from code/Infrastructure/Health/HealthStatusBroadcaster.cs
rename to code/Cleanuparr.Infrastructure/Health/HealthStatusBroadcaster.cs
index cb5a310e..9fc5e0ea 100644
--- a/code/Infrastructure/Health/HealthStatusBroadcaster.cs
+++ b/code/Cleanuparr.Infrastructure/Health/HealthStatusBroadcaster.cs
@@ -2,7 +2,7 @@ using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Health;
+namespace Cleanuparr.Infrastructure.Health;
///
/// Service that broadcasts health status changes via SignalR
diff --git a/code/Infrastructure/Health/HealthStatusHub.cs b/code/Cleanuparr.Infrastructure/Health/HealthStatusHub.cs
similarity index 96%
rename from code/Infrastructure/Health/HealthStatusHub.cs
rename to code/Cleanuparr.Infrastructure/Health/HealthStatusHub.cs
index d88499db..6d4483b4 100644
--- a/code/Infrastructure/Health/HealthStatusHub.cs
+++ b/code/Cleanuparr.Infrastructure/Health/HealthStatusHub.cs
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Health;
+namespace Cleanuparr.Infrastructure.Health;
///
/// SignalR hub for broadcasting health status updates
diff --git a/code/Infrastructure/Health/IHealthCheckService.cs b/code/Cleanuparr.Infrastructure/Health/IHealthCheckService.cs
similarity index 96%
rename from code/Infrastructure/Health/IHealthCheckService.cs
rename to code/Cleanuparr.Infrastructure/Health/IHealthCheckService.cs
index e799747c..b8647ef0 100644
--- a/code/Infrastructure/Health/IHealthCheckService.cs
+++ b/code/Cleanuparr.Infrastructure/Health/IHealthCheckService.cs
@@ -1,4 +1,4 @@
-namespace Infrastructure.Health;
+namespace Cleanuparr.Infrastructure.Health;
///
/// Service for checking the health of download clients
diff --git a/code/Infrastructure/Helpers/CacheKeys.cs b/code/Cleanuparr.Infrastructure/Helpers/CacheKeys.cs
similarity index 90%
rename from code/Infrastructure/Helpers/CacheKeys.cs
rename to code/Cleanuparr.Infrastructure/Helpers/CacheKeys.cs
index 4df43f58..6e8d6a25 100644
--- a/code/Infrastructure/Helpers/CacheKeys.cs
+++ b/code/Cleanuparr.Infrastructure/Helpers/CacheKeys.cs
@@ -1,6 +1,6 @@
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
-namespace Infrastructure.Helpers;
+namespace Cleanuparr.Infrastructure.Helpers;
public static class CacheKeys
{
diff --git a/code/Infrastructure/Helpers/LogProperties.cs b/code/Cleanuparr.Infrastructure/Helpers/LogProperties.cs
similarity index 72%
rename from code/Infrastructure/Helpers/LogProperties.cs
rename to code/Cleanuparr.Infrastructure/Helpers/LogProperties.cs
index 10f260e5..5a97c61a 100644
--- a/code/Infrastructure/Helpers/LogProperties.cs
+++ b/code/Cleanuparr.Infrastructure/Helpers/LogProperties.cs
@@ -1,4 +1,4 @@
-namespace Infrastructure.Helpers;
+namespace Cleanuparr.Infrastructure.Helpers;
public static class LogProperties
{
diff --git a/code/Infrastructure/Http/DynamicHttpClientProvider.cs b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientProvider.cs
similarity index 91%
rename from code/Infrastructure/Http/DynamicHttpClientProvider.cs
rename to code/Cleanuparr.Infrastructure/Http/DynamicHttpClientProvider.cs
index 3c5c5eed..1b1d5c57 100644
--- a/code/Infrastructure/Http/DynamicHttpClientProvider.cs
+++ b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientProvider.cs
@@ -1,12 +1,11 @@
-using Common.Configuration;
-using Data.Models.Configuration.General;
-using Data;
-using Infrastructure.Http.DynamicHttpClientSystem;
-using Microsoft.Extensions.Logging;
-using Microsoft.EntityFrameworkCore;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Http.DynamicHttpClientSystem;
+using Cleanuparr.Persistence;
+using Cleanuparr.Persistence.Models.Configuration;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
-namespace Infrastructure.Http;
+namespace Cleanuparr.Infrastructure.Http;
///
/// Provides dynamically configured HTTP clients for download services
@@ -57,7 +56,7 @@ public class DynamicHttpClientProvider : IDynamicHttpClientProvider
// Determine the client type based on the download client type
var clientType = downloadClientConfig.TypeName switch
{
- Common.Enums.DownloadClientTypeName.Deluge => HttpClientType.Deluge,
+ DownloadClientTypeName.Deluge => HttpClientType.Deluge,
_ => HttpClientType.WithRetry
};
diff --git a/code/Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientConfiguration.cs b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientConfiguration.cs
similarity index 97%
rename from code/Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientConfiguration.cs
rename to code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientConfiguration.cs
index 312a1f8e..beea3218 100644
--- a/code/Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientConfiguration.cs
+++ b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientConfiguration.cs
@@ -1,4 +1,5 @@
using System.Net;
+using Cleanuparr.Infrastructure.Services;
using Infrastructure.Services;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Http;
@@ -6,7 +7,7 @@ using Microsoft.Extensions.Options;
using Polly;
using Polly.Extensions.Http;
-namespace Infrastructure.Http.DynamicHttpClientSystem;
+namespace Cleanuparr.Infrastructure.Http.DynamicHttpClientSystem;
///
/// Dynamic configuration handler - this configures HttpClients on-demand based on stored configurations
diff --git a/code/Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientFactory.cs b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientFactory.cs
similarity index 97%
rename from code/Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientFactory.cs
rename to code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientFactory.cs
index 50d16de6..4eeda34d 100644
--- a/code/Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientFactory.cs
+++ b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientFactory.cs
@@ -1,9 +1,9 @@
using System.Net;
-using Common.Enums;
-using Data.Models.Configuration.General;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Persistence.Models.Configuration.General;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Http.DynamicHttpClientSystem;
+namespace Cleanuparr.Infrastructure.Http.DynamicHttpClientSystem;
///
/// Implementation of the dynamic HttpClient factory
diff --git a/code/Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientServiceCollectionExtensions.cs b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientServiceCollectionExtensions.cs
similarity index 94%
rename from code/Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientServiceCollectionExtensions.cs
rename to code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientServiceCollectionExtensions.cs
index d527b336..ffd93bb7 100644
--- a/code/Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientServiceCollectionExtensions.cs
+++ b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/DynamicHttpClientServiceCollectionExtensions.cs
@@ -2,7 +2,7 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Http;
using Microsoft.Extensions.Options;
-namespace Infrastructure.Http.DynamicHttpClientSystem;
+namespace Cleanuparr.Infrastructure.Http.DynamicHttpClientSystem;
///
/// Service collection extensions for the dynamic HTTP client system
diff --git a/code/Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfig.cs b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfig.cs
similarity index 90%
rename from code/Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfig.cs
rename to code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfig.cs
index f2ddfc8b..cafc6d19 100644
--- a/code/Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfig.cs
+++ b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfig.cs
@@ -1,7 +1,7 @@
using System.Net;
-using Common.Enums;
+using Cleanuparr.Domain.Enums;
-namespace Infrastructure.Http.DynamicHttpClientSystem;
+namespace Cleanuparr.Infrastructure.Http.DynamicHttpClientSystem;
///
/// Configuration for a dynamic HTTP client
diff --git a/code/Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfigStore.cs b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfigStore.cs
similarity index 96%
rename from code/Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfigStore.cs
rename to code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfigStore.cs
index 09a7e82f..e6d67ec8 100644
--- a/code/Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfigStore.cs
+++ b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfigStore.cs
@@ -1,6 +1,6 @@
using System.Collections.Concurrent;
-namespace Infrastructure.Http.DynamicHttpClientSystem;
+namespace Cleanuparr.Infrastructure.Http.DynamicHttpClientSystem;
///
/// In-memory implementation of the HTTP client configuration store
diff --git a/code/Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfigurationService.cs b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfigurationService.cs
similarity index 90%
rename from code/Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfigurationService.cs
rename to code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfigurationService.cs
index 14cb7c32..b161251f 100644
--- a/code/Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfigurationService.cs
+++ b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/HttpClientConfigurationService.cs
@@ -1,11 +1,11 @@
-using Common.Helpers;
-using Data;
-using Infrastructure.Verticals.DownloadClient.Deluge;
+using Cleanuparr.Persistence;
+using Cleanuparr.Shared.Helpers;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
+using DelugeService = Cleanuparr.Infrastructure.Features.DownloadClient.Deluge.DelugeService;
-namespace Infrastructure.Http.DynamicHttpClientSystem;
+namespace Cleanuparr.Infrastructure.Http.DynamicHttpClientSystem;
///
/// Background service to pre-register standard HttpClient configurations
diff --git a/code/Infrastructure/Http/DynamicHttpClientSystem/HttpClientOptionsInvalidator.cs b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/HttpClientOptionsInvalidator.cs
similarity index 97%
rename from code/Infrastructure/Http/DynamicHttpClientSystem/HttpClientOptionsInvalidator.cs
rename to code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/HttpClientOptionsInvalidator.cs
index 3f051fab..a9c03002 100644
--- a/code/Infrastructure/Http/DynamicHttpClientSystem/HttpClientOptionsInvalidator.cs
+++ b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/HttpClientOptionsInvalidator.cs
@@ -2,7 +2,7 @@ using Microsoft.Extensions.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
-namespace Infrastructure.Http.DynamicHttpClientSystem;
+namespace Cleanuparr.Infrastructure.Http.DynamicHttpClientSystem;
///
/// Implementation of HTTP client options invalidator using cache manipulation
diff --git a/code/Infrastructure/Http/DynamicHttpClientSystem/IDynamicHttpClientFactory.cs b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/IDynamicHttpClientFactory.cs
similarity index 92%
rename from code/Infrastructure/Http/DynamicHttpClientSystem/IDynamicHttpClientFactory.cs
rename to code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/IDynamicHttpClientFactory.cs
index a8260c57..160bc5cf 100644
--- a/code/Infrastructure/Http/DynamicHttpClientSystem/IDynamicHttpClientFactory.cs
+++ b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/IDynamicHttpClientFactory.cs
@@ -1,7 +1,7 @@
-using Common.Enums;
-using Data.Models.Configuration.General;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Persistence.Models.Configuration.General;
-namespace Infrastructure.Http.DynamicHttpClientSystem;
+namespace Cleanuparr.Infrastructure.Http.DynamicHttpClientSystem;
///
/// Factory service to manage dynamic HttpClient creation
diff --git a/code/Infrastructure/Http/DynamicHttpClientSystem/IHttpClientConfigStore.cs b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/IHttpClientConfigStore.cs
similarity index 94%
rename from code/Infrastructure/Http/DynamicHttpClientSystem/IHttpClientConfigStore.cs
rename to code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/IHttpClientConfigStore.cs
index 5cbb3543..2f03ac34 100644
--- a/code/Infrastructure/Http/DynamicHttpClientSystem/IHttpClientConfigStore.cs
+++ b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/IHttpClientConfigStore.cs
@@ -1,4 +1,4 @@
-namespace Infrastructure.Http.DynamicHttpClientSystem;
+namespace Cleanuparr.Infrastructure.Http.DynamicHttpClientSystem;
///
/// Store interface for managing HttpClient configurations dynamically
diff --git a/code/Infrastructure/Http/DynamicHttpClientSystem/IHttpClientOptionsInvalidator.cs b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/IHttpClientOptionsInvalidator.cs
similarity index 91%
rename from code/Infrastructure/Http/DynamicHttpClientSystem/IHttpClientOptionsInvalidator.cs
rename to code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/IHttpClientOptionsInvalidator.cs
index 1ec111cd..9020bc85 100644
--- a/code/Infrastructure/Http/DynamicHttpClientSystem/IHttpClientOptionsInvalidator.cs
+++ b/code/Cleanuparr.Infrastructure/Http/DynamicHttpClientSystem/IHttpClientOptionsInvalidator.cs
@@ -1,4 +1,4 @@
-namespace Infrastructure.Http.DynamicHttpClientSystem;
+namespace Cleanuparr.Infrastructure.Http.DynamicHttpClientSystem;
///
/// Service for invalidating cached HTTP client configurations
diff --git a/code/Infrastructure/Http/IDynamicHttpClientProvider.cs b/code/Cleanuparr.Infrastructure/Http/IDynamicHttpClientProvider.cs
similarity index 84%
rename from code/Infrastructure/Http/IDynamicHttpClientProvider.cs
rename to code/Cleanuparr.Infrastructure/Http/IDynamicHttpClientProvider.cs
index e5541829..ba47885a 100644
--- a/code/Infrastructure/Http/IDynamicHttpClientProvider.cs
+++ b/code/Cleanuparr.Infrastructure/Http/IDynamicHttpClientProvider.cs
@@ -1,6 +1,6 @@
-using Common.Configuration;
+using Cleanuparr.Persistence.Models.Configuration;
-namespace Infrastructure.Http;
+namespace Cleanuparr.Infrastructure.Http;
///
/// Interface for a provider that creates HTTP clients dynamically based on client configuration
diff --git a/code/Infrastructure/Hubs/AppHub.cs b/code/Cleanuparr.Infrastructure/Hubs/AppHub.cs
similarity index 95%
rename from code/Infrastructure/Hubs/AppHub.cs
rename to code/Cleanuparr.Infrastructure/Hubs/AppHub.cs
index c82e1f38..8fc68433 100644
--- a/code/Infrastructure/Hubs/AppHub.cs
+++ b/code/Cleanuparr.Infrastructure/Hubs/AppHub.cs
@@ -1,10 +1,10 @@
-using Data;
-using Infrastructure.Logging;
+using Cleanuparr.Infrastructure.Logging;
+using Cleanuparr.Persistence;
using Microsoft.AspNetCore.SignalR;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Hubs;
+namespace Cleanuparr.Infrastructure.Hubs;
///
/// Unified SignalR hub for logs and events
diff --git a/code/Infrastructure/Interceptors/DryRunInterceptor.cs b/code/Cleanuparr.Infrastructure/Interceptors/DryRunInterceptor.cs
similarity index 94%
rename from code/Infrastructure/Interceptors/DryRunInterceptor.cs
rename to code/Cleanuparr.Infrastructure/Interceptors/DryRunInterceptor.cs
index b6b3a506..631bbeba 100644
--- a/code/Infrastructure/Interceptors/DryRunInterceptor.cs
+++ b/code/Cleanuparr.Infrastructure/Interceptors/DryRunInterceptor.cs
@@ -1,9 +1,10 @@
using System.Reflection;
-using Data;
-using Microsoft.Extensions.Logging;
+using Cleanuparr.Persistence;
+using Infrastructure.Interceptors;
using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Logging;
-namespace Infrastructure.Interceptors;
+namespace Cleanuparr.Infrastructure.Interceptors;
public class DryRunInterceptor : IDryRunInterceptor
{
diff --git a/code/Infrastructure/Interceptors/IDryRunInterceptor.cs b/code/Cleanuparr.Infrastructure/Interceptors/IDryRunInterceptor.cs
similarity index 100%
rename from code/Infrastructure/Interceptors/IDryRunInterceptor.cs
rename to code/Cleanuparr.Infrastructure/Interceptors/IDryRunInterceptor.cs
diff --git a/code/Infrastructure/Logging/LogBuffer.cs b/code/Cleanuparr.Infrastructure/Logging/LogBuffer.cs
similarity index 95%
rename from code/Infrastructure/Logging/LogBuffer.cs
rename to code/Cleanuparr.Infrastructure/Logging/LogBuffer.cs
index 0472248c..052c4d17 100644
--- a/code/Infrastructure/Logging/LogBuffer.cs
+++ b/code/Cleanuparr.Infrastructure/Logging/LogBuffer.cs
@@ -1,6 +1,6 @@
using System.Collections.Concurrent;
-namespace Infrastructure.Logging;
+namespace Cleanuparr.Infrastructure.Logging;
///
/// Maintains a buffer of recent log entries for newly connected clients
diff --git a/code/Infrastructure/Logging/LoggingConfigManager.cs b/code/Cleanuparr.Infrastructure/Logging/LoggingConfigManager.cs
similarity index 95%
rename from code/Infrastructure/Logging/LoggingConfigManager.cs
rename to code/Cleanuparr.Infrastructure/Logging/LoggingConfigManager.cs
index 362ea2c0..80b7d196 100644
--- a/code/Infrastructure/Logging/LoggingConfigManager.cs
+++ b/code/Cleanuparr.Infrastructure/Logging/LoggingConfigManager.cs
@@ -1,10 +1,10 @@
-using Data;
+using Cleanuparr.Persistence;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Serilog.Core;
using Serilog.Events;
-namespace Infrastructure.Logging;
+namespace Cleanuparr.Infrastructure.Logging;
///
/// Manages logging configuration and provides dynamic log level control
diff --git a/code/Infrastructure/Logging/LoggingInitializer.cs b/code/Cleanuparr.Infrastructure/Logging/LoggingInitializer.cs
similarity index 92%
rename from code/Infrastructure/Logging/LoggingInitializer.cs
rename to code/Cleanuparr.Infrastructure/Logging/LoggingInitializer.cs
index effd1b3b..14a61256 100644
--- a/code/Infrastructure/Logging/LoggingInitializer.cs
+++ b/code/Cleanuparr.Infrastructure/Logging/LoggingInitializer.cs
@@ -1,11 +1,11 @@
-using Data.Enums;
-using Infrastructure.Events;
-using Infrastructure.Helpers;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Events;
+using Cleanuparr.Infrastructure.Helpers;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Serilog.Context;
-namespace Infrastructure.Logging;
+namespace Cleanuparr.Infrastructure.Logging;
// TODO remove
public class LoggingInitializer : BackgroundService
diff --git a/code/Infrastructure/Logging/README.md b/code/Cleanuparr.Infrastructure/Logging/README.md
similarity index 100%
rename from code/Infrastructure/Logging/README.md
rename to code/Cleanuparr.Infrastructure/Logging/README.md
diff --git a/code/Infrastructure/Logging/SignalRLogSink.cs b/code/Cleanuparr.Infrastructure/Logging/SignalRLogSink.cs
similarity index 97%
rename from code/Infrastructure/Logging/SignalRLogSink.cs
rename to code/Cleanuparr.Infrastructure/Logging/SignalRLogSink.cs
index b728670b..00e971f1 100644
--- a/code/Infrastructure/Logging/SignalRLogSink.cs
+++ b/code/Cleanuparr.Infrastructure/Logging/SignalRLogSink.cs
@@ -1,13 +1,13 @@
using System.Collections.Concurrent;
using System.Globalization;
-using Infrastructure.Hubs;
+using Cleanuparr.Infrastructure.Hubs;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Logging;
using Serilog.Core;
using Serilog.Events;
using Serilog.Formatting.Display;
-namespace Infrastructure.Logging;
+namespace Cleanuparr.Infrastructure.Logging;
///
/// A Serilog sink that sends log events to SignalR clients
diff --git a/code/Infrastructure/Models/JobInfo.cs b/code/Cleanuparr.Infrastructure/Models/JobInfo.cs
similarity index 88%
rename from code/Infrastructure/Models/JobInfo.cs
rename to code/Cleanuparr.Infrastructure/Models/JobInfo.cs
index 5a7791d7..005ac7a0 100644
--- a/code/Infrastructure/Models/JobInfo.cs
+++ b/code/Cleanuparr.Infrastructure/Models/JobInfo.cs
@@ -1,4 +1,4 @@
-namespace Infrastructure.Models;
+namespace Cleanuparr.Infrastructure.Models;
public class JobInfo
{
diff --git a/code/Infrastructure/Models/JobSchedule.cs b/code/Cleanuparr.Infrastructure/Models/JobSchedule.cs
similarity index 94%
rename from code/Infrastructure/Models/JobSchedule.cs
rename to code/Cleanuparr.Infrastructure/Models/JobSchedule.cs
index a425a885..9d76f6ab 100644
--- a/code/Infrastructure/Models/JobSchedule.cs
+++ b/code/Cleanuparr.Infrastructure/Models/JobSchedule.cs
@@ -1,7 +1,7 @@
-using Infrastructure.Utilities;
using System.ComponentModel.DataAnnotations;
+using Cleanuparr.Infrastructure.Utilities;
-namespace Infrastructure.Models;
+namespace Cleanuparr.Infrastructure.Models;
///
/// Represents the unit of time for job scheduling intervals
diff --git a/code/Infrastructure/Models/JobType.cs b/code/Cleanuparr.Infrastructure/Models/JobType.cs
similarity index 95%
rename from code/Infrastructure/Models/JobType.cs
rename to code/Cleanuparr.Infrastructure/Models/JobType.cs
index 80138443..ea6a27d0 100644
--- a/code/Infrastructure/Models/JobType.cs
+++ b/code/Cleanuparr.Infrastructure/Models/JobType.cs
@@ -1,4 +1,4 @@
-namespace Infrastructure.Models;
+namespace Cleanuparr.Infrastructure.Models;
///
/// Represents the supported job types in the application
diff --git a/code/Infrastructure/Services/CertificateValidationService.cs b/code/Cleanuparr.Infrastructure/Services/CertificateValidationService.cs
similarity index 95%
rename from code/Infrastructure/Services/CertificateValidationService.cs
rename to code/Cleanuparr.Infrastructure/Services/CertificateValidationService.cs
index 20768fde..e9976075 100644
--- a/code/Infrastructure/Services/CertificateValidationService.cs
+++ b/code/Cleanuparr.Infrastructure/Services/CertificateValidationService.cs
@@ -1,11 +1,11 @@
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
-using Common.Enums;
-using Infrastructure.Extensions;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Infrastructure.Extensions;
using Microsoft.Extensions.Logging;
-namespace Infrastructure.Services;
+namespace Cleanuparr.Infrastructure.Services;
public class CertificateValidationService
{
diff --git a/code/Infrastructure/Services/Interfaces/IJobManagementService.cs b/code/Cleanuparr.Infrastructure/Services/Interfaces/IJobManagementService.cs
similarity index 92%
rename from code/Infrastructure/Services/Interfaces/IJobManagementService.cs
rename to code/Cleanuparr.Infrastructure/Services/Interfaces/IJobManagementService.cs
index 095bd346..7e982103 100644
--- a/code/Infrastructure/Services/Interfaces/IJobManagementService.cs
+++ b/code/Cleanuparr.Infrastructure/Services/Interfaces/IJobManagementService.cs
@@ -1,4 +1,4 @@
-using Infrastructure.Models;
+using Cleanuparr.Infrastructure.Models;
namespace Infrastructure.Services.Interfaces;
diff --git a/code/Infrastructure/Services/JobManagementService.cs b/code/Cleanuparr.Infrastructure/Services/JobManagementService.cs
similarity index 99%
rename from code/Infrastructure/Services/JobManagementService.cs
rename to code/Cleanuparr.Infrastructure/Services/JobManagementService.cs
index b83d14d3..85272f11 100644
--- a/code/Infrastructure/Services/JobManagementService.cs
+++ b/code/Cleanuparr.Infrastructure/Services/JobManagementService.cs
@@ -1,13 +1,12 @@
-using Common.Configuration;
-using Infrastructure.Models;
-using Infrastructure.Utilities;
+using System.Collections.Concurrent;
+using Cleanuparr.Infrastructure.Models;
+using Cleanuparr.Infrastructure.Utilities;
+using Infrastructure.Services.Interfaces;
using Microsoft.Extensions.Logging;
using Quartz;
-using System.Collections.Concurrent;
-using Infrastructure.Services.Interfaces;
using Quartz.Impl.Matchers;
-namespace Infrastructure.Services;
+namespace Cleanuparr.Infrastructure.Services;
public class JobManagementService : IJobManagementService
{
diff --git a/code/Infrastructure/Services/UriService.cs b/code/Cleanuparr.Infrastructure/Services/UriService.cs
similarity index 94%
rename from code/Infrastructure/Services/UriService.cs
rename to code/Cleanuparr.Infrastructure/Services/UriService.cs
index aa8ed7fd..91f8994f 100644
--- a/code/Infrastructure/Services/UriService.cs
+++ b/code/Cleanuparr.Infrastructure/Services/UriService.cs
@@ -1,6 +1,6 @@
using System.Text.RegularExpressions;
-namespace Infrastructure.Services;
+namespace Cleanuparr.Infrastructure.Services;
public static class UriService
{
diff --git a/code/Infrastructure/Utilities/CronExpressionConverter.cs b/code/Cleanuparr.Infrastructure/Utilities/CronExpressionConverter.cs
similarity index 98%
rename from code/Infrastructure/Utilities/CronExpressionConverter.cs
rename to code/Cleanuparr.Infrastructure/Utilities/CronExpressionConverter.cs
index 765d4247..11ecb662 100644
--- a/code/Infrastructure/Utilities/CronExpressionConverter.cs
+++ b/code/Cleanuparr.Infrastructure/Utilities/CronExpressionConverter.cs
@@ -1,8 +1,8 @@
-using Infrastructure.Models;
using System.ComponentModel.DataAnnotations;
+using Cleanuparr.Infrastructure.Models;
using Quartz;
-namespace Infrastructure.Utilities;
+namespace Cleanuparr.Infrastructure.Utilities;
///
/// Utility for converting user-friendly schedule formats to Quartz cron expressions
diff --git a/code/Infrastructure/Utilities/ScheduleOptions.cs b/code/Cleanuparr.Infrastructure/Utilities/ScheduleOptions.cs
similarity index 95%
rename from code/Infrastructure/Utilities/ScheduleOptions.cs
rename to code/Cleanuparr.Infrastructure/Utilities/ScheduleOptions.cs
index cf6f0fb0..59f42eac 100644
--- a/code/Infrastructure/Utilities/ScheduleOptions.cs
+++ b/code/Cleanuparr.Infrastructure/Utilities/ScheduleOptions.cs
@@ -1,6 +1,6 @@
-using Infrastructure.Models;
+using Cleanuparr.Infrastructure.Models;
-namespace Infrastructure.Utilities;
+namespace Cleanuparr.Infrastructure.Utilities;
///
/// Provides predefined valid scheduling options for different time units
diff --git a/code/Data/Data.csproj b/code/Cleanuparr.Persistence/Cleanuparr.Persistence.csproj
similarity index 54%
rename from code/Data/Data.csproj
rename to code/Cleanuparr.Persistence/Cleanuparr.Persistence.csproj
index c20c4920..bea9d649 100644
--- a/code/Data/Data.csproj
+++ b/code/Cleanuparr.Persistence/Cleanuparr.Persistence.csproj
@@ -6,19 +6,22 @@
enable
+
+
+
+
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
diff --git a/code/Data/Converters/LowercaseEnumConverter.cs b/code/Cleanuparr.Persistence/Converters/LowercaseEnumConverter.cs
similarity index 87%
rename from code/Data/Converters/LowercaseEnumConverter.cs
rename to code/Cleanuparr.Persistence/Converters/LowercaseEnumConverter.cs
index 7260d698..345255f3 100644
--- a/code/Data/Converters/LowercaseEnumConverter.cs
+++ b/code/Cleanuparr.Persistence/Converters/LowercaseEnumConverter.cs
@@ -1,6 +1,6 @@
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-namespace Data.Converters;
+namespace Cleanuparr.Persistence.Converters;
public class LowercaseEnumConverter : ValueConverter
where TEnum : struct, Enum
diff --git a/code/Data/Converters/UtcDateTimeConverter.cs b/code/Cleanuparr.Persistence/Converters/UtcDateTimeConverter.cs
similarity index 85%
rename from code/Data/Converters/UtcDateTimeConverter.cs
rename to code/Cleanuparr.Persistence/Converters/UtcDateTimeConverter.cs
index e9f58885..db483ca9 100644
--- a/code/Data/Converters/UtcDateTimeConverter.cs
+++ b/code/Cleanuparr.Persistence/Converters/UtcDateTimeConverter.cs
@@ -1,6 +1,6 @@
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-namespace Data.Converters;
+namespace Cleanuparr.Persistence.Converters;
public class UtcDateTimeConverter : ValueConverter
{
diff --git a/code/Data/DataContext.cs b/code/Cleanuparr.Persistence/DataContext.cs
similarity index 84%
rename from code/Data/DataContext.cs
rename to code/Cleanuparr.Persistence/DataContext.cs
index 1ddff922..cc773416 100644
--- a/code/Data/DataContext.cs
+++ b/code/Cleanuparr.Persistence/DataContext.cs
@@ -1,15 +1,15 @@
-using Common.Configuration;
-using Data.Models.Configuration.Arr;
-using Data.Models.Configuration.DownloadCleaner;
-using Data.Models.Configuration.General;
-using Data.Models.Configuration.Notification;
-using Data.Models.Configuration.QueueCleaner;
-using Common.Helpers;
-using Data.Converters;
+using Cleanuparr.Persistence.Converters;
+using Cleanuparr.Persistence.Models.Configuration;
+using Cleanuparr.Persistence.Models.Configuration.Arr;
+using Cleanuparr.Persistence.Models.Configuration.DownloadCleaner;
+using Cleanuparr.Persistence.Models.Configuration.General;
+using Cleanuparr.Persistence.Models.Configuration.Notification;
+using Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
+using Cleanuparr.Shared.Helpers;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-namespace Data;
+namespace Cleanuparr.Persistence;
///
/// Database context for configuration data
@@ -86,7 +86,7 @@ public class DataContext : DbContext
modelBuilder.Entity(entityType.ClrType)
.Property(property.Name)
- .HasConversion((ValueConverter)converter);
+ .HasConversion((ValueConverter)converter!);
}
}
}
diff --git a/code/Data/EventsContext.cs b/code/Cleanuparr.Persistence/EventsContext.cs
similarity index 93%
rename from code/Data/EventsContext.cs
rename to code/Cleanuparr.Persistence/EventsContext.cs
index 1aa8e3fe..25074d3f 100644
--- a/code/Data/EventsContext.cs
+++ b/code/Cleanuparr.Persistence/EventsContext.cs
@@ -1,10 +1,10 @@
-using Common.Helpers;
-using Data.Converters;
-using Data.Models.Events;
+using Cleanuparr.Persistence.Converters;
+using Cleanuparr.Persistence.Models.Events;
+using Cleanuparr.Shared.Helpers;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-namespace Data;
+namespace Cleanuparr.Persistence;
///
/// Database context for events
diff --git a/code/Data/Migrations/Data/20250615190608_InitialData.Designer.cs b/code/Cleanuparr.Persistence/Migrations/Data/20250615190608_InitialData.Designer.cs
similarity index 99%
rename from code/Data/Migrations/Data/20250615190608_InitialData.Designer.cs
rename to code/Cleanuparr.Persistence/Migrations/Data/20250615190608_InitialData.Designer.cs
index 526857ad..f11df38d 100644
--- a/code/Data/Migrations/Data/20250615190608_InitialData.Designer.cs
+++ b/code/Cleanuparr.Persistence/Migrations/Data/20250615190608_InitialData.Designer.cs
@@ -1,15 +1,13 @@
//
-using System;
-using System.Collections.Generic;
+
+#nullable disable
+
using Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-#nullable disable
-
-namespace Data.Migrations.Data
+namespace Cleanuparr.Persistence.Migrations.Data
{
[DbContext(typeof(DataContext))]
[Migration("20250615190608_InitialData")]
diff --git a/code/Data/Migrations/Data/20250615190608_InitialData.cs b/code/Cleanuparr.Persistence/Migrations/Data/20250615190608_InitialData.cs
similarity index 99%
rename from code/Data/Migrations/Data/20250615190608_InitialData.cs
rename to code/Cleanuparr.Persistence/Migrations/Data/20250615190608_InitialData.cs
index cd192be3..44953c3b 100644
--- a/code/Data/Migrations/Data/20250615190608_InitialData.cs
+++ b/code/Cleanuparr.Persistence/Migrations/Data/20250615190608_InitialData.cs
@@ -1,9 +1,8 @@
-using System;
+#nullable disable
+
using Microsoft.EntityFrameworkCore.Migrations;
-#nullable disable
-
-namespace Data.Migrations.Data
+namespace Cleanuparr.Persistence.Migrations.Data
{
///
public partial class InitialData : Migration
diff --git a/code/Data/Migrations/Data/DataContextModelSnapshot.cs b/code/Cleanuparr.Persistence/Migrations/Data/DataContextModelSnapshot.cs
similarity index 99%
rename from code/Data/Migrations/Data/DataContextModelSnapshot.cs
rename to code/Cleanuparr.Persistence/Migrations/Data/DataContextModelSnapshot.cs
index db68d83d..1a37d30e 100644
--- a/code/Data/Migrations/Data/DataContextModelSnapshot.cs
+++ b/code/Cleanuparr.Persistence/Migrations/Data/DataContextModelSnapshot.cs
@@ -8,7 +8,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
-namespace Data.Migrations.Data
+namespace Cleanuparr.Persistence.Migrations.Data
{
[DbContext(typeof(DataContext))]
partial class DataContextModelSnapshot : ModelSnapshot
diff --git a/code/Data/Migrations/Events/20250614211246_InitialEvents.Designer.cs b/code/Cleanuparr.Persistence/Migrations/Events/20250614211246_InitialEvents.Designer.cs
similarity index 95%
rename from code/Data/Migrations/Events/20250614211246_InitialEvents.Designer.cs
rename to code/Cleanuparr.Persistence/Migrations/Events/20250614211246_InitialEvents.Designer.cs
index 88f194f9..001a9903 100644
--- a/code/Data/Migrations/Events/20250614211246_InitialEvents.Designer.cs
+++ b/code/Cleanuparr.Persistence/Migrations/Events/20250614211246_InitialEvents.Designer.cs
@@ -1,14 +1,13 @@
//
-using System;
+
+#nullable disable
+
using Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-#nullable disable
-
-namespace Data.Migrations.Events
+namespace Cleanuparr.Persistence.Migrations.Events
{
[DbContext(typeof(EventsContext))]
[Migration("20250614211246_InitialEvents")]
diff --git a/code/Data/Migrations/Events/20250614211246_InitialEvents.cs b/code/Cleanuparr.Persistence/Migrations/Events/20250614211246_InitialEvents.cs
similarity index 96%
rename from code/Data/Migrations/Events/20250614211246_InitialEvents.cs
rename to code/Cleanuparr.Persistence/Migrations/Events/20250614211246_InitialEvents.cs
index fb2c0bdc..7de7b0b2 100644
--- a/code/Data/Migrations/Events/20250614211246_InitialEvents.cs
+++ b/code/Cleanuparr.Persistence/Migrations/Events/20250614211246_InitialEvents.cs
@@ -1,9 +1,8 @@
-using System;
+#nullable disable
+
using Microsoft.EntityFrameworkCore.Migrations;
-#nullable disable
-
-namespace Data.Migrations.Events
+namespace Cleanuparr.Persistence.Migrations.Events
{
///
public partial class InitialEvents : Migration
diff --git a/code/Data/Migrations/Events/EventsContextModelSnapshot.cs b/code/Cleanuparr.Persistence/Migrations/Events/EventsContextModelSnapshot.cs
similarity index 98%
rename from code/Data/Migrations/Events/EventsContextModelSnapshot.cs
rename to code/Cleanuparr.Persistence/Migrations/Events/EventsContextModelSnapshot.cs
index aa343358..8d12fea2 100644
--- a/code/Data/Migrations/Events/EventsContextModelSnapshot.cs
+++ b/code/Cleanuparr.Persistence/Migrations/Events/EventsContextModelSnapshot.cs
@@ -7,7 +7,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
#nullable disable
-namespace Data.Migrations.Events
+namespace Cleanuparr.Persistence.Migrations.Events
{
[DbContext(typeof(EventsContext))]
partial class EventsContextModelSnapshot : ModelSnapshot
diff --git a/code/Data/Models/Configuration/Arr/ArrConfig.cs b/code/Cleanuparr.Persistence/Models/Configuration/Arr/ArrConfig.cs
similarity index 84%
rename from code/Data/Models/Configuration/Arr/ArrConfig.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/Arr/ArrConfig.cs
index 30447aa0..3dc0b3ea 100644
--- a/code/Data/Models/Configuration/Arr/ArrConfig.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/Arr/ArrConfig.cs
@@ -1,9 +1,8 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
-using Common.Configuration;
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
-namespace Data.Models.Configuration.Arr;
+namespace Cleanuparr.Persistence.Models.Configuration.Arr;
public class ArrConfig : IConfig
{
diff --git a/code/Data/Models/Configuration/Arr/ArrInstance.cs b/code/Cleanuparr.Persistence/Models/Configuration/Arr/ArrInstance.cs
similarity index 84%
rename from code/Data/Models/Configuration/Arr/ArrInstance.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/Arr/ArrInstance.cs
index c76c8f65..387d4a9b 100644
--- a/code/Data/Models/Configuration/Arr/ArrInstance.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/Arr/ArrInstance.cs
@@ -1,8 +1,8 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
-using Common.Attributes;
+using Cleanuparr.Shared.Attributes;
-namespace Data.Models.Configuration.Arr;
+namespace Cleanuparr.Persistence.Models.Configuration.Arr;
public sealed class ArrInstance
{
diff --git a/code/Data/Models/Configuration/DownloadCleaner/CleanCategory.cs b/code/Cleanuparr.Persistence/Models/Configuration/DownloadCleaner/CleanCategory.cs
similarity index 89%
rename from code/Data/Models/Configuration/DownloadCleaner/CleanCategory.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/DownloadCleaner/CleanCategory.cs
index a9a475da..2e5a8f7b 100644
--- a/code/Data/Models/Configuration/DownloadCleaner/CleanCategory.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/DownloadCleaner/CleanCategory.cs
@@ -1,9 +1,8 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
-using Common.Configuration;
-using ValidationException = Common.Exceptions.ValidationException;
+using ValidationException = Cleanuparr.Domain.Exceptions.ValidationException;
-namespace Data.Models.Configuration.DownloadCleaner;
+namespace Cleanuparr.Persistence.Models.Configuration.DownloadCleaner;
public sealed record CleanCategory : IConfig
{
diff --git a/code/Data/Models/Configuration/DownloadCleaner/DownloadCleanerConfig.cs b/code/Cleanuparr.Persistence/Models/Configuration/DownloadCleaner/DownloadCleanerConfig.cs
similarity index 94%
rename from code/Data/Models/Configuration/DownloadCleaner/DownloadCleanerConfig.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/DownloadCleaner/DownloadCleanerConfig.cs
index a00e8b1d..8c992fb3 100644
--- a/code/Data/Models/Configuration/DownloadCleaner/DownloadCleanerConfig.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/DownloadCleaner/DownloadCleanerConfig.cs
@@ -1,9 +1,8 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
-using Common.Configuration;
-using ValidationException = Common.Exceptions.ValidationException;
+using ValidationException = Cleanuparr.Domain.Exceptions.ValidationException;
-namespace Data.Models.Configuration.DownloadCleaner;
+namespace Cleanuparr.Persistence.Models.Configuration.DownloadCleaner;
public sealed record DownloadCleanerConfig : IJobConfig
{
diff --git a/code/Data/Models/Configuration/DownloadClientConfig.cs b/code/Cleanuparr.Persistence/Models/Configuration/DownloadClientConfig.cs
similarity index 93%
rename from code/Data/Models/Configuration/DownloadClientConfig.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/DownloadClientConfig.cs
index fa81943e..dca67711 100644
--- a/code/Data/Models/Configuration/DownloadClientConfig.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/DownloadClientConfig.cs
@@ -1,10 +1,10 @@
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json.Serialization;
-using Common.Attributes;
-using Common.Enums;
-using Common.Exceptions;
+using Cleanuparr.Domain.Enums;
+using Cleanuparr.Domain.Exceptions;
+using Cleanuparr.Shared.Attributes;
-namespace Common.Configuration;
+namespace Cleanuparr.Persistence.Models.Configuration;
///
/// Configuration for a specific download client
diff --git a/code/Data/Models/Configuration/General/GeneralConfig.cs b/code/Cleanuparr.Persistence/Models/Configuration/General/GeneralConfig.cs
similarity index 85%
rename from code/Data/Models/Configuration/General/GeneralConfig.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/General/GeneralConfig.cs
index d2674047..6a5660de 100644
--- a/code/Data/Models/Configuration/General/GeneralConfig.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/General/GeneralConfig.cs
@@ -1,11 +1,10 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
-using Common.Configuration;
-using Common.Enums;
+using Cleanuparr.Domain.Enums;
using Serilog.Events;
-using ValidationException = Common.Exceptions.ValidationException;
+using ValidationException = Cleanuparr.Domain.Exceptions.ValidationException;
-namespace Data.Models.Configuration.General;
+namespace Cleanuparr.Persistence.Models.Configuration.General;
public sealed record GeneralConfig : IConfig
{
diff --git a/code/Cleanuparr.Persistence/Models/Configuration/IConfig.cs b/code/Cleanuparr.Persistence/Models/Configuration/IConfig.cs
new file mode 100644
index 00000000..6330638e
--- /dev/null
+++ b/code/Cleanuparr.Persistence/Models/Configuration/IConfig.cs
@@ -0,0 +1,6 @@
+namespace Cleanuparr.Persistence.Models.Configuration;
+
+public interface IConfig
+{
+ void Validate();
+}
\ No newline at end of file
diff --git a/code/Data/Models/Configuration/IJobConfig.cs b/code/Cleanuparr.Persistence/Models/Configuration/IJobConfig.cs
similarity index 84%
rename from code/Data/Models/Configuration/IJobConfig.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/IJobConfig.cs
index 94c468af..d2ee9115 100644
--- a/code/Data/Models/Configuration/IJobConfig.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/IJobConfig.cs
@@ -1,4 +1,4 @@
-namespace Common.Configuration;
+namespace Cleanuparr.Persistence.Models.Configuration;
public interface IJobConfig : IConfig
{
diff --git a/code/Data/Models/Configuration/Notification/AppriseConfig.cs b/code/Cleanuparr.Persistence/Models/Configuration/Notification/AppriseConfig.cs
similarity index 84%
rename from code/Data/Models/Configuration/Notification/AppriseConfig.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/Notification/AppriseConfig.cs
index d1905741..fbbd7de0 100644
--- a/code/Data/Models/Configuration/Notification/AppriseConfig.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/Notification/AppriseConfig.cs
@@ -1,4 +1,4 @@
-namespace Data.Models.Configuration.Notification;
+namespace Cleanuparr.Persistence.Models.Configuration.Notification;
public sealed record AppriseConfig : NotificationConfig
{
diff --git a/code/Data/Models/Configuration/Notification/NotifiarrConfig.cs b/code/Cleanuparr.Persistence/Models/Configuration/Notification/NotifiarrConfig.cs
similarity index 85%
rename from code/Data/Models/Configuration/Notification/NotifiarrConfig.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/Notification/NotifiarrConfig.cs
index 8cde407e..10b9a70a 100644
--- a/code/Data/Models/Configuration/Notification/NotifiarrConfig.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/Notification/NotifiarrConfig.cs
@@ -1,4 +1,4 @@
-namespace Data.Models.Configuration.Notification;
+namespace Cleanuparr.Persistence.Models.Configuration.Notification;
public sealed record NotifiarrConfig : NotificationConfig
{
diff --git a/code/Data/Models/Configuration/Notification/NotificationConfig.cs b/code/Cleanuparr.Persistence/Models/Configuration/Notification/NotificationConfig.cs
similarity index 92%
rename from code/Data/Models/Configuration/Notification/NotificationConfig.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/Notification/NotificationConfig.cs
index dfc3040a..c6522834 100644
--- a/code/Data/Models/Configuration/Notification/NotificationConfig.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/Notification/NotificationConfig.cs
@@ -1,7 +1,7 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
-namespace Data.Models.Configuration.Notification;
+namespace Cleanuparr.Persistence.Models.Configuration.Notification;
public abstract record NotificationConfig
{
diff --git a/code/Data/Models/Configuration/QueueCleaner/BlocklistSettings.cs b/code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/BlocklistSettings.cs
similarity index 73%
rename from code/Data/Models/Configuration/QueueCleaner/BlocklistSettings.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/BlocklistSettings.cs
index ded9b14a..9eea9ba4 100644
--- a/code/Data/Models/Configuration/QueueCleaner/BlocklistSettings.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/BlocklistSettings.cs
@@ -1,6 +1,7 @@
using System.ComponentModel.DataAnnotations.Schema;
+using Cleanuparr.Domain.Enums;
-namespace Data.Models.Configuration.QueueCleaner;
+namespace Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
///
/// Settings for a blocklist
diff --git a/code/Data/Models/Configuration/QueueCleaner/ContentBlockerConfig.cs b/code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/ContentBlockerConfig.cs
similarity index 87%
rename from code/Data/Models/Configuration/QueueCleaner/ContentBlockerConfig.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/ContentBlockerConfig.cs
index 6136eb73..20a9593a 100644
--- a/code/Data/Models/Configuration/QueueCleaner/ContentBlockerConfig.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/ContentBlockerConfig.cs
@@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations.Schema;
-namespace Data.Models.Configuration.QueueCleaner;
+namespace Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
[ComplexType]
public sealed record ContentBlockerConfig
diff --git a/code/Data/Models/Configuration/QueueCleaner/FailedImportConfig.cs b/code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/FailedImportConfig.cs
similarity index 83%
rename from code/Data/Models/Configuration/QueueCleaner/FailedImportConfig.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/FailedImportConfig.cs
index 50f4c0d5..ee6073ad 100644
--- a/code/Data/Models/Configuration/QueueCleaner/FailedImportConfig.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/FailedImportConfig.cs
@@ -1,7 +1,7 @@
using System.ComponentModel.DataAnnotations.Schema;
-using Common.Exceptions;
+using Cleanuparr.Domain.Exceptions;
-namespace Data.Models.Configuration.QueueCleaner;
+namespace Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
[ComplexType]
public sealed record FailedImportConfig
diff --git a/code/Data/Models/Configuration/QueueCleaner/QueueCleanerConfig.cs b/code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/QueueCleanerConfig.cs
similarity index 92%
rename from code/Data/Models/Configuration/QueueCleaner/QueueCleanerConfig.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/QueueCleanerConfig.cs
index c2064d8f..c1dc1471 100644
--- a/code/Data/Models/Configuration/QueueCleaner/QueueCleanerConfig.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/QueueCleanerConfig.cs
@@ -1,8 +1,7 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
-using Common.Configuration;
-namespace Data.Models.Configuration.QueueCleaner;
+namespace Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
public sealed record QueueCleanerConfig : IJobConfig
{
diff --git a/code/Data/Models/Configuration/QueueCleaner/SlowConfig.cs b/code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/SlowConfig.cs
similarity index 93%
rename from code/Data/Models/Configuration/QueueCleaner/SlowConfig.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/SlowConfig.cs
index 2e5c72fa..7a15a0ec 100644
--- a/code/Data/Models/Configuration/QueueCleaner/SlowConfig.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/SlowConfig.cs
@@ -1,9 +1,9 @@
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json.Serialization;
-using Common.CustomDataTypes;
-using Common.Exceptions;
+using Cleanuparr.Domain.Entities;
+using Cleanuparr.Domain.Exceptions;
-namespace Data.Models.Configuration.QueueCleaner;
+namespace Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
[ComplexType]
public sealed record SlowConfig
diff --git a/code/Data/Models/Configuration/QueueCleaner/StalledConfig.cs b/code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/StalledConfig.cs
similarity index 88%
rename from code/Data/Models/Configuration/QueueCleaner/StalledConfig.cs
rename to code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/StalledConfig.cs
index 5e0c1141..c5d2fb8a 100644
--- a/code/Data/Models/Configuration/QueueCleaner/StalledConfig.cs
+++ b/code/Cleanuparr.Persistence/Models/Configuration/QueueCleaner/StalledConfig.cs
@@ -1,7 +1,7 @@
using System.ComponentModel.DataAnnotations.Schema;
-using Common.Exceptions;
+using Cleanuparr.Domain.Exceptions;
-namespace Data.Models.Configuration.QueueCleaner;
+namespace Cleanuparr.Persistence.Models.Configuration.QueueCleaner;
[ComplexType]
public sealed record StalledConfig
diff --git a/code/Data/Models/Events/AppEvent.cs b/code/Cleanuparr.Persistence/Models/Events/AppEvent.cs
similarity index 87%
rename from code/Data/Models/Events/AppEvent.cs
rename to code/Cleanuparr.Persistence/Models/Events/AppEvent.cs
index 8b0ebcf3..2a1474d5 100644
--- a/code/Data/Models/Events/AppEvent.cs
+++ b/code/Cleanuparr.Persistence/Models/Events/AppEvent.cs
@@ -1,10 +1,8 @@
using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-using System.Globalization;
-using Data.Enums;
+using Cleanuparr.Domain.Enums;
using Microsoft.EntityFrameworkCore;
-namespace Data.Models.Events;
+namespace Cleanuparr.Persistence.Models.Events;
///
/// Represents an event in the system
diff --git a/code/Common/Attributes/SensitiveDataAttribute.cs b/code/Cleanuparr.Shared/Attributes/SensitiveDataAttribute.cs
similarity index 85%
rename from code/Common/Attributes/SensitiveDataAttribute.cs
rename to code/Cleanuparr.Shared/Attributes/SensitiveDataAttribute.cs
index 9c45758f..b3de69dd 100644
--- a/code/Common/Attributes/SensitiveDataAttribute.cs
+++ b/code/Cleanuparr.Shared/Attributes/SensitiveDataAttribute.cs
@@ -1,4 +1,4 @@
-namespace Common.Attributes;
+namespace Cleanuparr.Shared.Attributes;
///
/// Marks a property as containing sensitive data that should be encrypted when stored in configuration files.
diff --git a/code/Cleanuparr.Shared/Cleanuparr.Shared.csproj b/code/Cleanuparr.Shared/Cleanuparr.Shared.csproj
new file mode 100644
index 00000000..17b910f6
--- /dev/null
+++ b/code/Cleanuparr.Shared/Cleanuparr.Shared.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net9.0
+ enable
+ enable
+
+
+
diff --git a/code/Common/Helpers/ConfigurationPathProvider.cs b/code/Cleanuparr.Shared/Helpers/ConfigurationPathProvider.cs
similarity index 98%
rename from code/Common/Helpers/ConfigurationPathProvider.cs
rename to code/Cleanuparr.Shared/Helpers/ConfigurationPathProvider.cs
index d9e5f7ad..618f5756 100644
--- a/code/Common/Helpers/ConfigurationPathProvider.cs
+++ b/code/Cleanuparr.Shared/Helpers/ConfigurationPathProvider.cs
@@ -1,4 +1,4 @@
-namespace Common.Helpers;
+namespace Cleanuparr.Shared.Helpers;
///
/// Provides the appropriate configuration path based on the runtime environment.
diff --git a/code/Common/Helpers/Constants.cs b/code/Cleanuparr.Shared/Helpers/Constants.cs
similarity index 88%
rename from code/Common/Helpers/Constants.cs
rename to code/Cleanuparr.Shared/Helpers/Constants.cs
index 8e7de886..4c1d0fc8 100644
--- a/code/Common/Helpers/Constants.cs
+++ b/code/Cleanuparr.Shared/Helpers/Constants.cs
@@ -1,4 +1,4 @@
-namespace Common.Helpers;
+namespace Cleanuparr.Shared.Helpers;
public static class Constants
{
diff --git a/code/Common/Helpers/StaticConfiguration.cs b/code/Cleanuparr.Shared/Helpers/StaticConfiguration.cs
similarity index 73%
rename from code/Common/Helpers/StaticConfiguration.cs
rename to code/Cleanuparr.Shared/Helpers/StaticConfiguration.cs
index 225df86e..cf596c94 100644
--- a/code/Common/Helpers/StaticConfiguration.cs
+++ b/code/Cleanuparr.Shared/Helpers/StaticConfiguration.cs
@@ -1,4 +1,4 @@
-namespace Common.Helpers;
+namespace Cleanuparr.Shared.Helpers;
public static class StaticConfiguration
{
diff --git a/code/Data/Models/Arr/Blocking/BlockedItem.cs b/code/Data/Models/Arr/Blocking/BlockedItem.cs
deleted file mode 100644
index 9ba081b1..00000000
--- a/code/Data/Models/Arr/Blocking/BlockedItem.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Data.Models.Arr.Blocking;
-
-public record BlockedItem
-{
- public required string Hash { get; init; }
-
- public required Uri InstanceUrl { get; init; }
-}
\ No newline at end of file
diff --git a/code/Data/Models/Arr/Blocking/LidarrBlockedItem.cs b/code/Data/Models/Arr/Blocking/LidarrBlockedItem.cs
deleted file mode 100644
index c72f37bd..00000000
--- a/code/Data/Models/Arr/Blocking/LidarrBlockedItem.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Data.Models.Arr.Blocking;
-
-public sealed record LidarrBlockedItem : BlockedItem
-{
- public required long AlbumId { get; init; }
-
- public required long ArtistId { get; init; }
-}
\ No newline at end of file
diff --git a/code/Data/Models/Arr/Blocking/RadarrBlockedItem.cs b/code/Data/Models/Arr/Blocking/RadarrBlockedItem.cs
deleted file mode 100644
index 360c5adb..00000000
--- a/code/Data/Models/Arr/Blocking/RadarrBlockedItem.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace Data.Models.Arr.Blocking;
-
-public sealed record RadarrBlockedItem : BlockedItem
-{
- public required long MovieId { get; init; }
-}
\ No newline at end of file
diff --git a/code/Data/Models/Arr/Blocking/SonarrBlockedItem.cs b/code/Data/Models/Arr/Blocking/SonarrBlockedItem.cs
deleted file mode 100644
index 1abb0084..00000000
--- a/code/Data/Models/Arr/Blocking/SonarrBlockedItem.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace Data.Models.Arr.Blocking;
-
-public sealed record SonarrBlockedItem : BlockedItem
-{
- public required long EpisodeId { get; init; }
-
- public required long SeasonNumber { get; init; }
-
- public required long SeriesId { get; init; }
-}
\ No newline at end of file
diff --git a/code/Data/Models/Configuration/IConfig.cs b/code/Data/Models/Configuration/IConfig.cs
deleted file mode 100644
index b653cb3d..00000000
--- a/code/Data/Models/Configuration/IConfig.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace Common.Configuration;
-
-public interface IConfig
-{
- void Validate();
-}
\ No newline at end of file
diff --git a/code/Executable/appsettings.Development.json b/code/Executable/appsettings.Development.json
deleted file mode 100644
index 536b1ced..00000000
--- a/code/Executable/appsettings.Development.json
+++ /dev/null
@@ -1,151 +0,0 @@
-{
- "DRY_RUN": true,
- "HTTP_MAX_RETRIES": 0,
- "HTTP_TIMEOUT": 100,
- "HTTP_VALIDATE_CERT": "enabled",
- "Logging": {
- "LogLevel": "Verbose",
- "Enhanced": true,
- "File": {
- "Enabled": false,
- "Path": ""
- }
- },
- "SEARCH_ENABLED": true,
- "SEARCH_DELAY": 5,
- "Triggers": {
- "QueueCleaner": "0/10 * * * * ?",
- "ContentBlocker": "0/10 * * * * ?",
- "DownloadCleaner": "0/10 * * * * ?"
- },
- "ContentBlocker": {
- "Enabled": true,
- "IGNORE_PRIVATE": true,
- "DELETE_PRIVATE": false,
- "IGNORED_DOWNLOADS_PATH": "../test/data/cleanuperr/ignored_downloads"
- },
- "QueueCleaner": {
- "Enabled": true,
- "RunSequentially": true,
- "IGNORED_DOWNLOADS_PATH": "../test/data/cleanuperr/ignored_downloads",
- "IMPORT_FAILED_MAX_STRIKES": 3,
- "IMPORT_FAILED_IGNORE_PRIVATE": true,
- "IMPORT_FAILED_DELETE_PRIVATE": false,
- "IMPORT_FAILED_IGNORE_PATTERNS": [
- "file is a sample"
- ],
- "STALLED_MAX_STRIKES": 3,
- "STALLED_RESET_STRIKES_ON_PROGRESS": true,
- "STALLED_IGNORE_PRIVATE": true,
- "STALLED_DELETE_PRIVATE": false,
- "DOWNLOADING_METADATA_MAX_STRIKES": 3,
- "SLOW_MAX_STRIKES": 5,
- "SLOW_RESET_STRIKES_ON_PROGRESS": true,
- "SLOW_IGNORE_PRIVATE": false,
- "SLOW_DELETE_PRIVATE": false,
- "SLOW_MIN_SPEED": "1MB",
- "SLOW_MAX_TIME": 20,
- "SLOW_IGNORE_ABOVE_SIZE": "4GB"
- },
- "DownloadCleaner": {
- "Enabled": false,
- "DELETE_PRIVATE": false,
- "CATEGORIES": [
- {
- "Name": "tv-sonarr",
- "MAX_RATIO": -1,
- "MIN_SEED_TIME": 0,
- "MAX_SEED_TIME": 240
- }
- ],
- "UNLINKED_TARGET_CATEGORY": "cleanuperr-unlinked",
- "UNLINKED_USE_TAG": false,
- "UNLINKED_IGNORED_ROOT_DIR": "",
- "UNLINKED_CATEGORIES": [
- "tv-sonarr",
- "radarr"
- ],
- "IGNORED_DOWNLOADS_PATH": "../test/data/cleanuperr/ignored_downloads"
- },
- "DOWNLOAD_CLIENT": "qbittorrent",
- "qBittorrent": {
- "Url": "http://localhost:8080",
- "URL_BASE": "",
- "Username": "test",
- "Password": "testing"
- },
- "Deluge": {
- "Url": "http://localhost:8112",
- "URL_BASE": "",
- "Password": "testing"
- },
- "Transmission": {
- "Url": "http://localhost:9091",
- "URL_BASE": "transmission",
- "Username": "test",
- "Password": "testing"
- },
- "Sonarr": {
- "Enabled": true,
- "IMPORT_FAILED_MAX_STRIKES": -1,
- "SearchType": "Episode",
- "Block": {
- "Type": "blacklist",
- "Path": "https://raw.githubusercontent.com/flmorg/cleanuperr/refs/heads/main/blacklist"
- },
- "Instances": [
- {
- "Url": "http://localhost:8989",
- "ApiKey": "425d1e713f0c405cbbf359ac0502c1f4"
- }
- ]
- },
- "Radarr": {
- "Enabled": true,
- "IMPORT_FAILED_MAX_STRIKES": -1,
- "Block": {
- "Type": "blacklist",
- "Path": "https://raw.githubusercontent.com/flmorg/cleanuperr/refs/heads/main/blacklist"
- },
- "Instances": [
- {
- "Url": "http://localhost:7878",
- "ApiKey": "8b7454f668e54c5b8f44f56f93969761"
- }
- ]
- },
- "Lidarr": {
- "Enabled": true,
- "IMPORT_FAILED_MAX_STRIKES": -1,
- "Block": {
- "Type": "blacklist",
- "Path": "https://raw.githubusercontent.com/flmorg/cleanuperr/refs/heads/main/blacklist"
- },
- "Instances": [
- {
- "Url": "http://localhost:8686",
- "ApiKey": "7f677cfdc074414397af53dd633860c5"
- }
- ]
- },
- "Notifiarr": {
- "ON_IMPORT_FAILED_STRIKE": true,
- "ON_STALLED_STRIKE": true,
- "ON_SLOW_STRIKE": true,
- "ON_QUEUE_ITEM_DELETED": true,
- "ON_DOWNLOAD_CLEANED": true,
- "ON_CATEGORY_CHANGED": true,
- "API_KEY": "",
- "CHANNEL_ID": ""
- },
- "Apprise": {
- "ON_IMPORT_FAILED_STRIKE": true,
- "ON_STALLED_STRIKE": true,
- "ON_SLOW_STRIKE": true,
- "ON_QUEUE_ITEM_DELETED": true,
- "ON_DOWNLOAD_CLEANED": true,
- "ON_CATEGORY_CHANGED": true,
- "URL": "http://localhost:8000",
- "KEY": ""
- }
-}
diff --git a/code/Executable/appsettings.json b/code/Executable/appsettings.json
deleted file mode 100644
index 35bb7679..00000000
--- a/code/Executable/appsettings.json
+++ /dev/null
@@ -1,138 +0,0 @@
-{
- "DRY_RUN": false,
- "HTTP_MAX_RETRIES": 0,
- "HTTP_TIMEOUT": 100,
- "HTTP_VALIDATE_CERT": "enabled",
- "Logging": {
- "LogLevel": "Information",
- "Enhanced": true,
- "File": {
- "Enabled": false,
- "Path": ""
- }
- },
- "SEARCH_ENABLED": true,
- "SEARCH_DELAY": 30,
- "Triggers": {
- "QueueCleaner": "0 0/5 * * * ?",
- "ContentBlocker": "0 0/5 * * * ?",
- "DownloadCleaner": "0 0 * * * ?"
- },
- "ContentBlocker": {
- "Enabled": false,
- "IGNORE_PRIVATE": false,
- "IGNORED_DOWNLOADS_PATH": ""
- },
- "QueueCleaner": {
- "Enabled": false,
- "RunSequentially": true,
- "IGNORED_DOWNLOADS_PATH": "",
- "IMPORT_FAILED_MAX_STRIKES": 0,
- "IMPORT_FAILED_IGNORE_PRIVATE": false,
- "IMPORT_FAILED_DELETE_PRIVATE": false,
- "IMPORT_FAILED_IGNORE_PATTERNS": [],
- "STALLED_MAX_STRIKES": 0,
- "STALLED_RESET_STRIKES_ON_PROGRESS": false,
- "STALLED_IGNORE_PRIVATE": false,
- "STALLED_DELETE_PRIVATE": false,
- "DOWNLOADING_METADATA_MAX_STRIKES": 0,
- "SLOW_MAX_STRIKES": 0,
- "SLOW_RESET_STRIKES_ON_PROGRESS": true,
- "SLOW_IGNORE_PRIVATE": false,
- "SLOW_DELETE_PRIVATE": false,
- "SLOW_MIN_SPEED": "",
- "SLOW_MAX_TIME": 0,
- "SLOW_IGNORE_ABOVE_SIZE": ""
- },
- "DownloadCleaner": {
- "Enabled": false,
- "DELETE_PRIVATE": false,
- "CATEGORIES": [],
- "UNLINKED_TARGET_CATEGORY": "cleanuperr-unlinked",
- "UNLINKED_USE_TAG": false,
- "UNLINKED_IGNORED_ROOT_DIR": "",
- "UNLINKED_CATEGORIES": [],
- "IGNORED_DOWNLOADS_PATH": ""
- },
- "DOWNLOAD_CLIENT": "none",
- "qBittorrent": {
- "Url": "http://localhost:8080",
- "URL_BASE": "",
- "Username": "",
- "Password": ""
- },
- "Deluge": {
- "Url": "http://localhost:8112",
- "URL_BASE": "",
- "Password": "testing"
- },
- "Transmission": {
- "Url": "http://localhost:9091",
- "URL_BASE": "transmission",
- "Username": "test",
- "Password": "testing"
- },
- "Sonarr": {
- "Enabled": false,
- "IMPORT_FAILED_MAX_STRIKES": -1,
- "SearchType": "Episode",
- "Block": {
- "Type": "blacklist",
- "Path": ""
- },
- "Instances": [
- {
- "Url": "http://localhost:8989",
- "ApiKey": ""
- }
- ]
- },
- "Radarr": {
- "Enabled": false,
- "IMPORT_FAILED_MAX_STRIKES": -1,
- "Block": {
- "Type": "blacklist",
- "Path": ""
- },
- "Instances": [
- {
- "Url": "http://localhost:7878",
- "ApiKey": ""
- }
- ]
- },
- "Lidarr": {
- "Enabled": false,
- "IMPORT_FAILED_MAX_STRIKES": -1,
- "Block": {
- "Type": "blacklist",
- "Path": ""
- },
- "Instances": [
- {
- "Url": "http://localhost:8686",
- "ApiKey": ""
- }
- ]
- },
- "Notifiarr": {
- "ON_IMPORT_FAILED_STRIKE": false,
- "ON_STALLED_STRIKE": false,
- "ON_SLOW_STRIKE": false,
- "ON_QUEUE_ITEM_DELETED": false,
- "ON_DOWNLOAD_CLEANED": false,
- "ON_CATEGORY_CHANGED": false,
- "API_KEY": "",
- "CHANNEL_ID": ""
- },
- "Apprise": {
- "ON_IMPORT_FAILED_STRIKE": false,
- "ON_STALLED_STRIKE": false,
- "ON_SLOW_STRIKE": false,
- "ON_QUEUE_ITEM_DELETED": false,
- "ON_DOWNLOAD_CLEANED": false,
- "ON_CATEGORY_CHANGED": false,
- "URL": "",
- "KEY": ""
- }
-}
diff --git a/code/Infrastructure/Verticals/Arr/Interfaces/ILidarrClient.cs b/code/Infrastructure/Verticals/Arr/Interfaces/ILidarrClient.cs
deleted file mode 100644
index 9a5cb3b0..00000000
--- a/code/Infrastructure/Verticals/Arr/Interfaces/ILidarrClient.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-namespace Infrastructure.Verticals.Arr.Interfaces;
-
-public interface ILidarrClient : IArrClient
-{
-}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/Arr/Interfaces/IRadarrClient.cs b/code/Infrastructure/Verticals/Arr/Interfaces/IRadarrClient.cs
deleted file mode 100644
index 71b0cff0..00000000
--- a/code/Infrastructure/Verticals/Arr/Interfaces/IRadarrClient.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-namespace Infrastructure.Verticals.Arr.Interfaces;
-
-public interface IRadarrClient : IArrClient
-{
-}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/Arr/Interfaces/ISonarrClient.cs b/code/Infrastructure/Verticals/Arr/Interfaces/ISonarrClient.cs
deleted file mode 100644
index 7863f7f7..00000000
--- a/code/Infrastructure/Verticals/Arr/Interfaces/ISonarrClient.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-namespace Infrastructure.Verticals.Arr.Interfaces;
-
-public interface ISonarrClient : IArrClient
-{
-}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/DownloadClient/BlockFilesResult.cs b/code/Infrastructure/Verticals/DownloadClient/BlockFilesResult.cs
deleted file mode 100644
index 1f8a3d01..00000000
--- a/code/Infrastructure/Verticals/DownloadClient/BlockFilesResult.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-namespace Infrastructure.Verticals.DownloadClient;
-
-public sealed record BlockFilesResult
-{
- ///
- /// True if the download should be removed; otherwise false.
- ///
- public bool ShouldRemove { get; set; }
-
- ///
- /// True if the download is private; otherwise false.
- ///
- public bool IsPrivate { get; set; }
-
- ///
- /// True if the download was found by the client; otherwise false.
- ///
- public bool Found { get; set; }
-}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/DownloadClient/Deluge/IDelugeService.cs b/code/Infrastructure/Verticals/DownloadClient/Deluge/IDelugeService.cs
deleted file mode 100644
index 0c516fb2..00000000
--- a/code/Infrastructure/Verticals/DownloadClient/Deluge/IDelugeService.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-namespace Infrastructure.Verticals.DownloadClient.Deluge;
-
-public interface IDelugeService : IDownloadService
-{
-}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/DownloadClient/QBittorrent/IQBitService.cs b/code/Infrastructure/Verticals/DownloadClient/QBittorrent/IQBitService.cs
deleted file mode 100644
index 2f7a14bc..00000000
--- a/code/Infrastructure/Verticals/DownloadClient/QBittorrent/IQBitService.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-namespace Infrastructure.Verticals.DownloadClient.QBittorrent;
-
-public interface IQBitService : IDownloadService, IDisposable
-{
-}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/DownloadClient/Transmission/ITransmissionService.cs b/code/Infrastructure/Verticals/DownloadClient/Transmission/ITransmissionService.cs
deleted file mode 100644
index 230e19f9..00000000
--- a/code/Infrastructure/Verticals/DownloadClient/Transmission/ITransmissionService.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-namespace Infrastructure.Verticals.DownloadClient.Transmission;
-
-public interface ITransmissionService : IDownloadService
-{
-}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/DownloadRemover/Interfaces/IQueueItemRemover.cs b/code/Infrastructure/Verticals/DownloadRemover/Interfaces/IQueueItemRemover.cs
deleted file mode 100644
index e99e6e18..00000000
--- a/code/Infrastructure/Verticals/DownloadRemover/Interfaces/IQueueItemRemover.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Data.Models.Arr;
-using Infrastructure.Verticals.DownloadRemover.Models;
-
-namespace Infrastructure.Verticals.DownloadRemover.Interfaces;
-
-public interface IQueueItemRemover
-{
- Task RemoveQueueItemAsync(QueueItemRemoveRequest request) where T : SearchItem;
-}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/Jobs/IHandler.cs b/code/Infrastructure/Verticals/Jobs/IHandler.cs
deleted file mode 100644
index 560241a6..00000000
--- a/code/Infrastructure/Verticals/Jobs/IHandler.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace Infrastructure.Verticals.Jobs;
-
-public interface IHandler
-{
- Task ExecuteAsync();
-}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/Notifications/Apprise/IAppriseProxy.cs b/code/Infrastructure/Verticals/Notifications/Apprise/IAppriseProxy.cs
deleted file mode 100644
index 256005f5..00000000
--- a/code/Infrastructure/Verticals/Notifications/Apprise/IAppriseProxy.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using Data.Models.Configuration.Notification;
-
-namespace Infrastructure.Verticals.Notifications.Apprise;
-
-public interface IAppriseProxy
-{
- Task SendNotification(ApprisePayload payload, AppriseConfig config);
-}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/Notifications/Models/FailedImportStrikeNotification.cs b/code/Infrastructure/Verticals/Notifications/Models/FailedImportStrikeNotification.cs
deleted file mode 100644
index 3699bf12..00000000
--- a/code/Infrastructure/Verticals/Notifications/Models/FailedImportStrikeNotification.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-namespace Infrastructure.Verticals.Notifications.Models;
-
-public sealed record FailedImportStrikeNotification : ArrNotification
-{
-}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/Notifications/Models/QueueItemDeletedNotification.cs b/code/Infrastructure/Verticals/Notifications/Models/QueueItemDeletedNotification.cs
deleted file mode 100644
index 5af2de3e..00000000
--- a/code/Infrastructure/Verticals/Notifications/Models/QueueItemDeletedNotification.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-namespace Infrastructure.Verticals.Notifications.Models;
-
-public sealed record QueueItemDeletedNotification : ArrNotification
-{
-}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/Notifications/Models/SlowStrikeNotification.cs b/code/Infrastructure/Verticals/Notifications/Models/SlowStrikeNotification.cs
deleted file mode 100644
index 796443bd..00000000
--- a/code/Infrastructure/Verticals/Notifications/Models/SlowStrikeNotification.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-namespace Infrastructure.Verticals.Notifications.Models;
-
-public sealed record SlowStrikeNotification : ArrNotification
-{
-}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/Notifications/Models/StalledStrikeNotification.cs b/code/Infrastructure/Verticals/Notifications/Models/StalledStrikeNotification.cs
deleted file mode 100644
index f194bc57..00000000
--- a/code/Infrastructure/Verticals/Notifications/Models/StalledStrikeNotification.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-namespace Infrastructure.Verticals.Notifications.Models;
-
-public sealed record StalledStrikeNotification : ArrNotification
-{
-}
\ No newline at end of file
diff --git a/code/Infrastructure/Verticals/Notifications/Notifiarr/INotifiarrProxy.cs b/code/Infrastructure/Verticals/Notifications/Notifiarr/INotifiarrProxy.cs
deleted file mode 100644
index 99e10199..00000000
--- a/code/Infrastructure/Verticals/Notifications/Notifiarr/INotifiarrProxy.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using Data.Models.Configuration.Notification;
-
-namespace Infrastructure.Verticals.Notifications.Notifiarr;
-
-public interface INotifiarrProxy
-{
- Task SendNotification(NotifiarrPayload payload, NotifiarrConfig config);
-}
\ No newline at end of file
diff --git a/code/cleanuparr.sln b/code/cleanuparr.sln
new file mode 100644
index 00000000..8ffae744
--- /dev/null
+++ b/code/cleanuparr.sln
@@ -0,0 +1,52 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cleanuparr.Domain", "Cleanuparr.Domain\Cleanuparr.Domain.csproj", "{88DFBF8D-733A-45B4-B254-908D818E5D44}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cleanuparr.Application", "Cleanuparr.Application\Cleanuparr.Application.csproj", "{5CE59F74-2C3B-4E87-9B23-37FC8AA62539}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cleanuparr.Infrastructure", "Cleanuparr.Infrastructure\Cleanuparr.Infrastructure.csproj", "{FD470DF2-6150-4908-9C08-CB975D54B3D6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cleanuparr.Persistence", "Cleanuparr.Persistence\Cleanuparr.Persistence.csproj", "{CBF2F5E6-6AF7-4859-8DC9-478EE7E5B667}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cleanuparr.Shared", "Cleanuparr.Shared\Cleanuparr.Shared.csproj", "{85BE59A0-5BAB-42A2-8523-5144A1BE523E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cleanuparr.Api", "Cleanuparr.Api\Cleanuparr.Api.csproj", "{C77FCF7C-AF23-4668-96AD-B502EA698752}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cleanuparr.Infrastructure.Tests", "Cleanuparr.Infrastructure.Tests\Cleanuparr.Infrastructure.Tests.csproj", "{8487A062-9977-408D-8496-CEAD966CEF6F}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {88DFBF8D-733A-45B4-B254-908D818E5D44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {88DFBF8D-733A-45B4-B254-908D818E5D44}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {88DFBF8D-733A-45B4-B254-908D818E5D44}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {88DFBF8D-733A-45B4-B254-908D818E5D44}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5CE59F74-2C3B-4E87-9B23-37FC8AA62539}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5CE59F74-2C3B-4E87-9B23-37FC8AA62539}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5CE59F74-2C3B-4E87-9B23-37FC8AA62539}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5CE59F74-2C3B-4E87-9B23-37FC8AA62539}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FD470DF2-6150-4908-9C08-CB975D54B3D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FD470DF2-6150-4908-9C08-CB975D54B3D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FD470DF2-6150-4908-9C08-CB975D54B3D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FD470DF2-6150-4908-9C08-CB975D54B3D6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CBF2F5E6-6AF7-4859-8DC9-478EE7E5B667}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CBF2F5E6-6AF7-4859-8DC9-478EE7E5B667}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CBF2F5E6-6AF7-4859-8DC9-478EE7E5B667}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CBF2F5E6-6AF7-4859-8DC9-478EE7E5B667}.Release|Any CPU.Build.0 = Release|Any CPU
+ {85BE59A0-5BAB-42A2-8523-5144A1BE523E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {85BE59A0-5BAB-42A2-8523-5144A1BE523E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {85BE59A0-5BAB-42A2-8523-5144A1BE523E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {85BE59A0-5BAB-42A2-8523-5144A1BE523E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C77FCF7C-AF23-4668-96AD-B502EA698752}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C77FCF7C-AF23-4668-96AD-B502EA698752}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C77FCF7C-AF23-4668-96AD-B502EA698752}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C77FCF7C-AF23-4668-96AD-B502EA698752}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8487A062-9977-408D-8496-CEAD966CEF6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8487A062-9977-408D-8496-CEAD966CEF6F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8487A062-9977-408D-8496-CEAD966CEF6F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8487A062-9977-408D-8496-CEAD966CEF6F}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/code/cleanuperr.sln b/code/cleanuperr.sln
deleted file mode 100644
index b69c4bc1..00000000
--- a/code/cleanuperr.sln
+++ /dev/null
@@ -1,40 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Executable", "Executable\Executable.csproj", "{38261017-0049-4377-B30F-7279CC2539B2}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "Common\Common.csproj", "{7AEA44C2-BDAA-49D8-A961-1FCA7779B39B}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Infrastructure", "Infrastructure\Infrastructure.csproj", "{3FEC04CA-8CC5-49F5-BBDE-1581C7C8AFB5}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Data", "Data\Data.csproj", "{8871592A-B260-4B15-8EF8-6AB24480DE5D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Infrastructure.Tests", "Infrastructure.Tests\Infrastructure.Tests.csproj", "{F2DBB5FD-8D93-45D0-B211-5E9A8C14B684}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {38261017-0049-4377-B30F-7279CC2539B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {38261017-0049-4377-B30F-7279CC2539B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {38261017-0049-4377-B30F-7279CC2539B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {38261017-0049-4377-B30F-7279CC2539B2}.Release|Any CPU.Build.0 = Release|Any CPU
- {7AEA44C2-BDAA-49D8-A961-1FCA7779B39B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7AEA44C2-BDAA-49D8-A961-1FCA7779B39B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7AEA44C2-BDAA-49D8-A961-1FCA7779B39B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7AEA44C2-BDAA-49D8-A961-1FCA7779B39B}.Release|Any CPU.Build.0 = Release|Any CPU
- {3FEC04CA-8CC5-49F5-BBDE-1581C7C8AFB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3FEC04CA-8CC5-49F5-BBDE-1581C7C8AFB5}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3FEC04CA-8CC5-49F5-BBDE-1581C7C8AFB5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3FEC04CA-8CC5-49F5-BBDE-1581C7C8AFB5}.Release|Any CPU.Build.0 = Release|Any CPU
- {8871592A-B260-4B15-8EF8-6AB24480DE5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8871592A-B260-4B15-8EF8-6AB24480DE5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8871592A-B260-4B15-8EF8-6AB24480DE5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8871592A-B260-4B15-8EF8-6AB24480DE5D}.Release|Any CPU.Build.0 = Release|Any CPU
- {F2DBB5FD-8D93-45D0-B211-5E9A8C14B684}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F2DBB5FD-8D93-45D0-B211-5E9A8C14B684}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F2DBB5FD-8D93-45D0-B211-5E9A8C14B684}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F2DBB5FD-8D93-45D0-B211-5E9A8C14B684}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
-EndGlobal
diff --git a/code/plan.md b/code/plan.md
new file mode 100644
index 00000000..2e852579
--- /dev/null
+++ b/code/plan.md
@@ -0,0 +1,330 @@
+ # Cleanuperr Clean Architecture Migration Plan
+
+## Overview
+This plan migrates the existing Cleanuperr .NET application from a mixed architecture to a clean architecture following Domain-Driven Design principles.
+
+## Target Architecture
+
+### Project Structure
+```
+Cleanuperr.Domain/ # Core business logic (no dependencies)
+├── Entities/ # Business entities
+├── ValueObjects/ # Value objects
+├── Enums/ # Domain enums
+├── Events/ # Domain events
+├── Exceptions/ # Domain-specific exceptions
+└── Services/ # Domain services
+
+Cleanuperr.Application/ # Use cases and application logic
+├── Features/ # Feature-based organization (CQRS)
+│ ├── {FeatureName}/
+│ │ ├── Commands/ # Command handlers
+│ │ ├── Queries/ # Query handlers
+│ │ └── DTOs/ # Data transfer objects
+├── Common/
+│ ├── Interfaces/ # Application service contracts
+│ ├── Behaviours/ # MediatR behaviors
+│ └── Exceptions/ # Application exceptions
+└── Extensions/ # Extension methods
+
+Cleanuperr.Infrastructure/ # External concerns
+├── Features/ # Feature-based infrastructure
+│ ├── {FeatureName}/
+│ │ └── Services/ # External service implementations
+├── Http/ # HTTP clients and configurations
+├── Logging/ # Logging infrastructure
+├── Health/ # Health checks
+├── Hubs/ # SignalR hubs
+├── Events/ # Event publishing
+├── Services/ # Infrastructure services
+├── Interceptors/ # Cross-cutting concerns
+└── Extensions/ # Infrastructure extensions
+
+Cleanuperr.Persistence/ # Data access layer
+├── Context/ # Entity Framework contexts
+├── Configurations/ # Entity configurations
+├── Repositories/ # Repository implementations
+├── Migrations/ # Database migrations
+└── Extensions/ # Persistence extensions
+
+Cleanuperr.Api/ # Web API presentation layer
+├── Controllers/ # API controllers (thin)
+├── Middleware/ # API middleware
+├── DependencyInjection/ # DI configuration
+├── Jobs/ # Background job scheduling
+└── Models/ # API-specific models
+
+Cleanuperr.Shared/ # Cross-cutting concerns
+├── Attributes/ # Custom attributes
+├── CustomDataTypes/ # Shared data types
+├── Helpers/ # Utility helpers
+└── Constants/ # Shared constants
+```
+
+## File Migration Map
+
+### **Cleanuperr.Domain** (Core Business Logic)
+
+#### Entities (from Data/Models/)
+- `Data/Models/Radarr/Movie.cs` → `Cleanuperr.Domain/Entities/Movie.cs`
+- `Data/Models/Lidarr/Album.cs` → `Cleanuperr.Domain/Entities/Album.cs`
+- `Data/Models/Lidarr/Artist.cs` → `Cleanuperr.Domain/Entities/Artist.cs`
+- `Data/Models/Sonarr/Series.cs` → `Cleanuperr.Domain/Entities/Series.cs`
+- `Data/Models/Sonarr/Episode.cs` → `Cleanuperr.Domain/Entities/Episode.cs`
+- `Data/Models/Arr/Queue/QueueRecord.cs` → `Cleanuperr.Domain/Entities/QueueRecord.cs`
+- `Data/Models/Arr/Queue/QueueMovie.cs` → `Cleanuperr.Domain/Entities/QueueMovie.cs`
+- `Data/Models/Arr/Queue/QueueAlbum.cs` → `Cleanuperr.Domain/Entities/QueueAlbum.cs`
+- `Data/Models/Arr/Queue/QueueSeries.cs` → `Cleanuperr.Domain/Entities/QueueSeries.cs`
+- `Data/Models/Arr/Queue/Image.cs` → `Cleanuperr.Domain/Entities/Image.cs`
+- `Data/Models/Arr/Queue/LidarrImage.cs` → `Cleanuperr.Domain/Entities/LidarrImage.cs`
+- `Data/Models/Events/AppEvent.cs` → `Cleanuperr.Domain/Entities/AppEvent.cs`
+
+#### Enums (from Data/Enums/ and Common/Enums/)
+- `Data/Enums/CleanReason.cs` → `Cleanuperr.Domain/Enums/CleanReason.cs`
+- `Data/Enums/DeleteReason.cs` → `Cleanuperr.Domain/Enums/DeleteReason.cs`
+- `Data/Enums/EventSeverity.cs` → `Cleanuperr.Domain/Enums/EventSeverity.cs`
+- `Data/Enums/EventType.cs` → `Cleanuperr.Domain/Enums/EventType.cs`
+- `Data/Enums/InstanceType.cs` → `Cleanuperr.Domain/Enums/InstanceType.cs`
+- `Data/Enums/StrikeType.cs` → `Cleanuperr.Domain/Enums/StrikeType.cs`
+- `Common/Enums/CertificateValidationType.cs` → `Cleanuperr.Domain/Enums/CertificateValidationType.cs`
+- `Common/Enums/DownloadClientType.cs` → `Cleanuperr.Domain/Enums/DownloadClientType.cs`
+- `Common/Enums/DownloadClientTypeName.cs` → `Cleanuperr.Domain/Enums/DownloadClientTypeName.cs`
+- `Data/Models/Configuration/QueueCleaner/BlocklistType.cs` → `Cleanuperr.Domain/Enums/BlocklistType.cs`
+
+#### Value Objects
+- `Common/CustomDataTypes/ByteSize.cs` → `Cleanuperr.Domain/ValueObjects/ByteSize.cs`
+- `Common/CustomDataTypes/SmartTimeSpan.cs` → `Cleanuperr.Domain/ValueObjects/SmartTimeSpan.cs`
+
+#### Domain Exceptions
+- `Common/Exceptions/FatalException.cs` → `Cleanuperr.Domain/Exceptions/FatalException.cs`
+- `Data/Models/Deluge/Exceptions/DelugeClientException.cs` → `Cleanuperr.Domain/Exceptions/DelugeClientException.cs`
+- `Data/Models/Deluge/Exceptions/DelugeLoginException.cs` → `Cleanuperr.Domain/Exceptions/DelugeLoginException.cs`
+- `Data/Models/Deluge/Exceptions/DelugeLogoutException.cs` → `Cleanuperr.Domain/Exceptions/DelugeLogoutException.cs`
+
+### **Cleanuperr.Application** (Use Cases & Application Logic)
+
+#### Features (organize by business capability)
+
+**DownloadCleaner Feature:**
+- Create: `Cleanuperr.Application/Features/DownloadCleaner/Commands/CleanDownloadsCommand.cs`
+- Create: `Cleanuperr.Application/Features/DownloadCleaner/Commands/CleanDownloadsCommandHandler.cs`
+- Create: `Cleanuperr.Application/Features/DownloadCleaner/DTOs/CleanDownloadsResult.cs`
+
+**QueueCleaner Feature:**
+- Create: `Cleanuperr.Application/Features/QueueCleaner/Commands/CleanQueueCommand.cs`
+- Create: `Cleanuperr.Application/Features/QueueCleaner/Commands/CleanQueueCommandHandler.cs`
+
+**Arr Integration Feature:**
+- Create: `Cleanuperr.Application/Features/Arr/Queries/GetQueueQuery.cs`
+- Create: `Cleanuperr.Application/Features/Arr/Queries/GetQueueQueryHandler.cs`
+- `Executable/DTOs/ArrConfigDto.cs` → `Cleanuperr.Application/Features/Arr/DTOs/ArrConfigDto.cs`
+- `Executable/DTOs/CreateArrInstanceDto.cs` → `Cleanuperr.Application/Features/Arr/DTOs/CreateArrInstanceDto.cs`
+- `Executable/DTOs/UpdateLidarrConfigDto.cs` → `Cleanuperr.Application/Features/Arr/DTOs/UpdateLidarrConfigDto.cs`
+- `Executable/DTOs/UpdateRadarrConfigDto.cs` → `Cleanuperr.Application/Features/Arr/DTOs/UpdateRadarrConfigDto.cs`
+- `Executable/DTOs/UpdateSonarrConfigDto.cs` → `Cleanuperr.Application/Features/Arr/DTOs/UpdateSonarrConfigDto.cs`
+
+**DownloadClient Feature:**
+- `Executable/DTOs/CreateDownloadClientDto.cs` → `Cleanuperr.Application/Features/DownloadClient/DTOs/CreateDownloadClientDto.cs`
+
+#### Common Application Services
+- `Common/Exceptions/ValidationException.cs` → `Cleanuperr.Application/Common/Exceptions/ValidationException.cs`
+
+#### Interfaces (to be implemented in Infrastructure/Persistence)
+- Create: `Cleanuperr.Application/Common/Interfaces/IApplicationDbContext.cs`
+- Create: `Cleanuperr.Application/Common/Interfaces/IDownloadService.cs`
+- Create: `Cleanuperr.Application/Common/Interfaces/IArrClient.cs`
+- Create: `Cleanuperr.Application/Common/Interfaces/INotificationService.cs`
+- Create: `Cleanuperr.Application/Common/Interfaces/IJobManagementService.cs`
+
+### **Cleanuperr.Infrastructure** (External Concerns)
+
+#### Features (Infrastructure implementations)
+
+**Arr Feature:**
+- `Infrastructure/Verticals/Arr/Interfaces/IArrClient.cs` → `Cleanuperr.Infrastructure/Features/Arr/Interfaces/IArrClient.cs`
+- `Infrastructure/Verticals/Arr/Interfaces/ILidarrClient.cs` → `Cleanuperr.Infrastructure/Features/Arr/Interfaces/ILidarrClient.cs`
+- `Infrastructure/Verticals/Arr/Interfaces/IRadarrClient.cs` → `Cleanuperr.Infrastructure/Features/Arr/Interfaces/IRadarrClient.cs`
+- `Infrastructure/Verticals/Arr/Interfaces/ISonarrClient.cs` → `Cleanuperr.Infrastructure/Features/Arr/Interfaces/ISonarrClient.cs`
+- `Infrastructure/Verticals/Arr/ArrClient.cs` → `Cleanuperr.Infrastructure/Features/Arr/Services/ArrClient.cs`
+- `Infrastructure/Verticals/Arr/ArrClientFactory.cs` → `Cleanuperr.Infrastructure/Features/Arr/Services/ArrClientFactory.cs`
+- `Infrastructure/Verticals/Arr/ArrQueueIterator.cs` → `Cleanuperr.Infrastructure/Features/Arr/Services/ArrQueueIterator.cs`
+- `Infrastructure/Verticals/Arr/LidarrClient.cs` → `Cleanuperr.Infrastructure/Features/Arr/Services/LidarrClient.cs`
+- `Infrastructure/Verticals/Arr/RadarrClient.cs` → `Cleanuperr.Infrastructure/Features/Arr/Services/RadarrClient.cs`
+- `Infrastructure/Verticals/Arr/SonarrClient.cs` → `Cleanuperr.Infrastructure/Features/Arr/Services/SonarrClient.cs`
+
+**DownloadCleaner Feature:**
+- `Infrastructure/Verticals/DownloadCleaner/DownloadCleaner.cs` → `Cleanuperr.Infrastructure/Features/DownloadCleaner/Services/DownloadCleanerService.cs`
+
+**DownloadClient Feature:**
+- `Infrastructure/Verticals/DownloadClient/` → `Cleanuperr.Infrastructure/Features/DownloadClient/`
+ - All Deluge, QBittorrent, Transmission services and interfaces
+ - `DownloadService.cs`, `DownloadServiceFactory.cs`, `IDownloadService.cs`
+ - Result classes: `BlockFilesResult.cs`, `DownloadCheckResult.cs`, `SeedingCheckResult.cs`
+
+**Notifications Feature:**
+- `Infrastructure/Verticals/Notifications/` → `Cleanuperr.Infrastructure/Features/Notifications/`
+ - All notification providers, consumers, models
+ - Apprise and Notifiarr implementations
+
+**ContentBlocker Feature:**
+- `Infrastructure/Verticals/ContentBlocker/` → `Cleanuperr.Infrastructure/Features/ContentBlocker/`
+
+**Files Feature:**
+- `Infrastructure/Verticals/Files/` → `Cleanuperr.Infrastructure/Features/Files/`
+
+**ItemStriker Feature:**
+- `Infrastructure/Verticals/ItemStriker/` → `Cleanuperr.Infrastructure/Features/ItemStriker/`
+
+**Jobs Feature:**
+- `Infrastructure/Verticals/Jobs/` → `Cleanuperr.Infrastructure/Features/Jobs/`
+
+**Security Feature:**
+- `Infrastructure/Verticals/Security/` → `Cleanuperr.Infrastructure/Features/Security/`
+
+#### Core Infrastructure Services
+- `Infrastructure/Health/` → `Cleanuperr.Infrastructure/Health/`
+- `Infrastructure/Http/` → `Cleanuperr.Infrastructure/Http/`
+- `Infrastructure/Logging/` → `Cleanuperr.Infrastructure/Logging/`
+- `Infrastructure/Events/` → `Cleanuperr.Infrastructure/Events/`
+- `Infrastructure/Services/` → `Cleanuperr.Infrastructure/Services/`
+- `Infrastructure/Interceptors/` → `Cleanuperr.Infrastructure/Interceptors/`
+- `Infrastructure/Utilities/` → `Cleanuperr.Infrastructure/Utilities/`
+- `Infrastructure/Extensions/` → `Cleanuperr.Infrastructure/Extensions/`
+- `Infrastructure/Helpers/` → `Cleanuperr.Infrastructure/Helpers/`
+- `Infrastructure/Models/` → `Cleanuperr.Infrastructure/Models/`
+- `Infrastructure/Hubs/` → `Cleanuperr.Infrastructure/Hubs/`
+
+### **Cleanuperr.Persistence** (Data Access)
+
+#### Context
+- `Data/DataContext.cs` → `Cleanuperr.Persistence/Context/DataContext.cs`
+- `Data/EventsContext.cs` → `Cleanuperr.Persistence/Context/EventsContext.cs`
+
+#### Configurations (move EF configurations from entities)
+- Create: `Cleanuperr.Persistence/Configurations/MovieConfiguration.cs`
+- Create: `Cleanuperr.Persistence/Configurations/AlbumConfiguration.cs`
+- Create: `Cleanuperr.Persistence/Configurations/ArtistConfiguration.cs`
+- etc. (for each entity)
+
+#### Migrations
+- `Data/Migrations/` → `Cleanuperr.Persistence/Migrations/`
+
+#### Converters
+- `Data/Converters/LowercaseEnumConverter.cs` → `Cleanuperr.Persistence/Converters/LowercaseEnumConverter.cs`
+- `Data/Converters/UtcDateTimeConverter.cs` → `Cleanuperr.Persistence/Converters/UtcDateTimeConverter.cs`
+
+#### Configuration Models (these are DTOs for persistence)
+- `Data/Models/Configuration/` → `Cleanuperr.Persistence/Models/Configuration/`
+- `Data/Models/Arr/` (non-entity models) → `Cleanuperr.Persistence/Models/Arr/`
+- `Data/Models/Deluge/` (non-entity models) → `Cleanuperr.Persistence/Models/External/Deluge/`
+- `Data/Models/Cache/` → `Cleanuperr.Persistence/Models/Cache/`
+
+### **Cleanuperr.Api** (Web API Layer)
+
+#### Controllers (convert to thin controllers using MediatR)
+- `Executable/Controllers/ApiDocumentationController.cs` → `Cleanuperr.Api/Controllers/ApiDocumentationController.cs`
+- `Executable/Controllers/ConfigurationController.cs` → `Cleanuperr.Api/Controllers/ConfigurationController.cs`
+- `Executable/Controllers/EventsController.cs` → `Cleanuperr.Api/Controllers/EventsController.cs`
+- `Executable/Controllers/HealthCheckController.cs` → `Cleanuperr.Api/Controllers/HealthCheckController.cs`
+- `Executable/Controllers/JobsController.cs` → `Cleanuperr.Api/Controllers/JobsController.cs`
+- `Executable/Controllers/StatusController.cs` → `Cleanuperr.Api/Controllers/StatusController.cs`
+
+#### DependencyInjection
+- `Executable/DependencyInjection/` → `Cleanuperr.Api/DependencyInjection/`
+
+#### Jobs
+- `Executable/Jobs/` → `Cleanuperr.Api/Jobs/`
+
+#### Middleware
+- `Executable/Middleware/` → `Cleanuperr.Api/Middleware/`
+
+#### Models (API-specific)
+- `Executable/Models/` → `Cleanuperr.Api/Models/`
+
+#### Entry Point
+- `Executable/Program.cs` → `Cleanuperr.Api/Program.cs`
+- `Executable/HostExtensions.cs` → `Cleanuperr.Api/HostExtensions.cs`
+
+### **Cleanuperr.Shared** (Cross-cutting Concerns)
+
+#### Attributes
+- `Common/Attributes/SensitiveDataAttribute.cs` → `Cleanuperr.Shared/Attributes/SensitiveDataAttribute.cs`
+
+#### Helpers
+- `Common/Helpers/ConfigurationPathProvider.cs` → `Cleanuperr.Shared/Helpers/ConfigurationPathProvider.cs`
+- `Common/Helpers/Constants.cs` → `Cleanuperr.Shared/Helpers/Constants.cs`
+- `Common/Helpers/StaticConfiguration.cs` → `Cleanuperr.Shared/Helpers/StaticConfiguration.cs`
+
+## Implementation Steps
+
+### Phase 1: Project Setup
+1. Delete existing new projects (if any)
+2. Create fresh projects with proper dependencies
+3. Install required NuGet packages
+4. Update solution file
+
+### Phase 2: Domain Layer Migration
+1. Create folder structure in Cleanuperr.Domain
+2. Move and clean entities (remove EF attributes)
+3. Move enums and value objects
+4. Move domain exceptions
+5. Ensure no external dependencies
+
+### Phase 3: Application Layer Migration
+1. Create folder structure in Cleanuperr.Application
+2. Create feature-based CQRS structure
+3. Move and convert DTOs
+4. Define application interfaces
+5. Create command/query handlers
+
+### Phase 4: Persistence Layer Migration
+1. Create folder structure in Cleanuperr.Persistence
+2. Move EF contexts
+3. Create entity configurations
+4. Move migrations and converters
+5. Move persistence-specific models
+
+### Phase 5: Infrastructure Layer Reorganization
+1. Reorganize existing Infrastructure by features
+2. Move vertical slices to feature-based structure
+3. Update dependencies to use Application interfaces
+4. Keep external service implementations
+
+### Phase 6: API Layer Migration
+1. Move controllers and convert to thin controllers
+2. Update controllers to use MediatR
+3. Move DI, middleware, jobs
+4. Update Program.cs
+
+### Phase 7: Shared Layer Migration
+1. Move cross-cutting utilities
+2. Move shared attributes and helpers
+
+### Phase 8: Cleanup
+1. Update all namespace references
+2. Fix using statements
+3. Update project references
+4. Delete old projects
+5. Test compilation and functionality
+
+### Phase 9: Testing & Validation
+1. Verify clean architecture principles
+2. Test all functionality
+3. Update documentation
+4. Performance validation
+
+## Success Criteria
+- [x] Solution compiles without errors
+- [x] All tests pass
+- [x] Clean separation of concerns achieved
+- [x] Dependency direction flows inward
+- [x] Feature-based organization implemented
+- [x] CQRS pattern established
+- [x] No circular dependencies
+- [x] Infrastructure depends only on abstractions
+
+## Files to Delete After Migration
+- `Data/` directory (entire)
+- `Common/` directory (entire)
+- `Executable/` directory (entire)
+- Old solution file references
\ No newline at end of file