Kaynağa Gözat

Trim white spaces from resource name

Tim Jones 2 ay önce
ebeveyn
işleme
b885106004
92 değiştirilmiş dosya ile 466 ekleme ve 968 silme
  1. 168 848
      Commands.md
  2. 15 0
      RackPeek.Domain/Helpers/Normalize.cs
  3. 1 1
      RackPeek.Domain/Resources/Hardware/AccessPoints/AddAccessPointUseCase.cs
  4. 2 2
      RackPeek.Domain/Resources/Hardware/AccessPoints/DeleteAccessPointUseCase.cs
  5. 1 1
      RackPeek.Domain/Resources/Hardware/AccessPoints/DescribeAccessPointUseCase.cs
  6. 1 1
      RackPeek.Domain/Resources/Hardware/AccessPoints/GetAccessPointUseCase.cs
  7. 1 1
      RackPeek.Domain/Resources/Hardware/AccessPoints/UpdateAccessPointUseCase.cs
  8. 1 0
      RackPeek.Domain/Resources/Hardware/Desktops/AddDesktopUseCase.cs
  9. 7 3
      RackPeek.Domain/Resources/Hardware/Desktops/Cpus/AddDesktopCpuUseCase.cs
  10. 8 4
      RackPeek.Domain/Resources/Hardware/Desktops/Cpus/RemoveDesktopCpuUseCase.cs
  11. 8 4
      RackPeek.Domain/Resources/Hardware/Desktops/Cpus/UpdateDesktopCpuUseCase.cs
  12. 2 1
      RackPeek.Domain/Resources/Hardware/Desktops/DeleteDesktopUseCase.cs
  13. 1 0
      RackPeek.Domain/Resources/Hardware/Desktops/DescribeDesktopUseCase.cs
  14. 7 3
      RackPeek.Domain/Resources/Hardware/Desktops/Drives/AddDesktopDriveUseCase.cs
  15. 8 4
      RackPeek.Domain/Resources/Hardware/Desktops/Drives/RemoveDesktopDriveUseCase.cs
  16. 8 4
      RackPeek.Domain/Resources/Hardware/Desktops/Drives/UpdateDesktopDriveUseCase.cs
  17. 1 0
      RackPeek.Domain/Resources/Hardware/Desktops/GetDesktopUseCase.cs
  18. 7 3
      RackPeek.Domain/Resources/Hardware/Desktops/Gpus/AddDesktopGpuUseCase.cs
  19. 8 4
      RackPeek.Domain/Resources/Hardware/Desktops/Gpus/RemoveDesktopGpuUseCase.cs
  20. 8 4
      RackPeek.Domain/Resources/Hardware/Desktops/Gpus/UpdateDesktopGpuUseCase.cs
  21. 7 3
      RackPeek.Domain/Resources/Hardware/Desktops/Nics/AddDesktopNicUseCase.cs
  22. 8 4
      RackPeek.Domain/Resources/Hardware/Desktops/Nics/RemoveDesktopNicUseCase.cs
  23. 8 4
      RackPeek.Domain/Resources/Hardware/Desktops/Nics/UpdateDesktopNicUseCase.cs
  24. 1 0
      RackPeek.Domain/Resources/Hardware/Desktops/UpdateDesktopUseCase.cs
  25. 1 0
      RackPeek.Domain/Resources/Hardware/Firewalls/AddFirewallUseCase.cs
  26. 2 1
      RackPeek.Domain/Resources/Hardware/Firewalls/DeleteFirewallUseCase.cs
  27. 1 0
      RackPeek.Domain/Resources/Hardware/Firewalls/DescribeFirewallUseCase.cs
  28. 1 0
      RackPeek.Domain/Resources/Hardware/Firewalls/GetFirewallUseCase.cs
  29. 1 0
      RackPeek.Domain/Resources/Hardware/Firewalls/UpdateFirewallUseCase.cs
  30. 1 0
      RackPeek.Domain/Resources/Hardware/Laptops/AddLaptopUseCase.cs
  31. 1 0
      RackPeek.Domain/Resources/Hardware/Laptops/Cpus/AddDesktopCpuUseCase.cs
  32. 1 0
      RackPeek.Domain/Resources/Hardware/Laptops/Cpus/RemoveDesktopCpuUseCase.cs
  33. 1 0
      RackPeek.Domain/Resources/Hardware/Laptops/Cpus/UpdateDesktopCpuUseCase.cs
  34. 2 1
      RackPeek.Domain/Resources/Hardware/Laptops/DeleteLaptopUseCase.cs
  35. 1 0
      RackPeek.Domain/Resources/Hardware/Laptops/DescribeLaptopUseCase.cs
  36. 1 0
      RackPeek.Domain/Resources/Hardware/Laptops/Drives/AddDesktopDriveUseCase.cs
  37. 1 0
      RackPeek.Domain/Resources/Hardware/Laptops/Drives/RemoveDesktopDriveUseCase.cs
  38. 1 0
      RackPeek.Domain/Resources/Hardware/Laptops/Drives/UpdateDesktopDriveUseCase.cs
  39. 1 0
      RackPeek.Domain/Resources/Hardware/Laptops/GetDesktopUseCase.cs
  40. 1 0
      RackPeek.Domain/Resources/Hardware/Laptops/Gpus/AddDesktopGpuUseCase.cs
  41. 1 0
      RackPeek.Domain/Resources/Hardware/Laptops/Gpus/RemoveDesktopGpuUseCase.cs
  42. 1 0
      RackPeek.Domain/Resources/Hardware/Laptops/Gpus/UpdateDesktopGpuUseCase.cs
  43. 1 0
      RackPeek.Domain/Resources/Hardware/Routers/AddRouterUseCase.cs
  44. 2 1
      RackPeek.Domain/Resources/Hardware/Routers/DeleteRouterUseCase.cs
  45. 1 0
      RackPeek.Domain/Resources/Hardware/Routers/DescribeRouterUseCase.cs
  46. 1 0
      RackPeek.Domain/Resources/Hardware/Routers/GetRouterUseCase.cs
  47. 1 0
      RackPeek.Domain/Resources/Hardware/Routers/UpdateRouterUseCase.cs
  48. 1 0
      RackPeek.Domain/Resources/Hardware/Servers/AddServerUseCase.cs
  49. 4 3
      RackPeek.Domain/Resources/Hardware/Servers/Cpus/AddCpuUseCase.cs
  50. 4 3
      RackPeek.Domain/Resources/Hardware/Servers/Cpus/RemoveCpuUseCase.cs
  51. 4 3
      RackPeek.Domain/Resources/Hardware/Servers/Cpus/UpdateCpuUseCase.cs
  52. 2 1
      RackPeek.Domain/Resources/Hardware/Servers/DeleteServerUseCase.cs
  53. 1 0
      RackPeek.Domain/Resources/Hardware/Servers/DescribeServerUseCase.cs
  54. 4 3
      RackPeek.Domain/Resources/Hardware/Servers/Drives/AddDriveUseCase.cs
  55. 4 3
      RackPeek.Domain/Resources/Hardware/Servers/Drives/RemoveDriveUseCase.cs
  56. 4 3
      RackPeek.Domain/Resources/Hardware/Servers/Drives/UpdateDriveUseCase.cs
  57. 1 0
      RackPeek.Domain/Resources/Hardware/Servers/GetServerUseCase.cs
  58. 5 4
      RackPeek.Domain/Resources/Hardware/Servers/Gpus/AddGpuUseCase.cs
  59. 4 3
      RackPeek.Domain/Resources/Hardware/Servers/Gpus/RemoveGpuUseCase.cs
  60. 4 3
      RackPeek.Domain/Resources/Hardware/Servers/Gpus/UpdateGpuUseCase.cs
  61. 5 4
      RackPeek.Domain/Resources/Hardware/Servers/Nics/AddNicUseCase.cs
  62. 5 4
      RackPeek.Domain/Resources/Hardware/Servers/Nics/RemoveNicUseCase.cs
  63. 5 4
      RackPeek.Domain/Resources/Hardware/Servers/Nics/UpdateNicUseCase.cs
  64. 1 0
      RackPeek.Domain/Resources/Hardware/Servers/UpdateServerUseCase.cs
  65. 1 0
      RackPeek.Domain/Resources/Hardware/Switches/AddSwitchUseCase.cs
  66. 2 1
      RackPeek.Domain/Resources/Hardware/Switches/DeleteSwitchUseCase.cs
  67. 1 0
      RackPeek.Domain/Resources/Hardware/Switches/DescribeSwitchUseCase.cs
  68. 1 0
      RackPeek.Domain/Resources/Hardware/Switches/GetSwitchUseCase.cs
  69. 1 0
      RackPeek.Domain/Resources/Hardware/Switches/UpdateSwitchUseCase.cs
  70. 1 0
      RackPeek.Domain/Resources/Hardware/UpsUnits/AddUpsUseCase.cs
  71. 2 1
      RackPeek.Domain/Resources/Hardware/UpsUnits/DeleteUpsUseCase.cs
  72. 1 0
      RackPeek.Domain/Resources/Hardware/UpsUnits/DescribeUpsUseCase.cs
  73. 1 0
      RackPeek.Domain/Resources/Hardware/UpsUnits/GetUpsUnitUseCase.cs
  74. 1 0
      RackPeek.Domain/Resources/Hardware/UpsUnits/UpdateUpsUseCase.cs
  75. 1 0
      RackPeek.Domain/Resources/Services/UseCases/AddServiceUseCase.cs
  76. 1 0
      RackPeek.Domain/Resources/Services/UseCases/DeleteServiceUseCase.cs
  77. 1 0
      RackPeek.Domain/Resources/Services/UseCases/DescribeServiceUseCase.cs
  78. 1 0
      RackPeek.Domain/Resources/Services/UseCases/GetServiceUseCase.cs
  79. 9 2
      RackPeek.Domain/Resources/Services/UseCases/UpdateServiceUseCase.cs
  80. 1 0
      RackPeek.Domain/Resources/SystemResources/UseCases/AddSystemUseCase.cs
  81. 4 3
      RackPeek.Domain/Resources/SystemResources/UseCases/DeleteSystemUseCase.cs
  82. 1 0
      RackPeek.Domain/Resources/SystemResources/UseCases/DescribeSystemUseCase.cs
  83. 4 3
      RackPeek.Domain/Resources/SystemResources/UseCases/GetSystemServiceTreeUseCase.cs
  84. 1 0
      RackPeek.Domain/Resources/SystemResources/UseCases/GetSystemUseCase.cs
  85. 9 1
      RackPeek.Domain/Resources/SystemResources/UseCases/UpdateSystemUseCase.cs
  86. 23 3
      Tests/EndToEnd/ServiceYamlE2ETests.cs
  87. 21 2
      Tests/EndToEnd/SystemYamlE2ETests.cs
  88. 0 1
      Tests/HardwareResources/AccessPoints/DeleteAccessPointUseCaseTests.cs
  89. 6 5
      Tests/HardwareResources/DeleteServerUseCaseTests.cs
  90. 0 1
      Tests/HardwareResources/Desktops/DeleteDesktopUseCaseTests.cs
  91. 0 1
      Tests/HardwareResources/Switches/DeleteSwitchUseCaseTests.cs
  92. 0 1
      Tests/HardwareResources/Ups/DeleteUpsUseCaseTests.cs

Dosya farkı çok büyük olduğundan ihmal edildi
+ 168 - 848
Commands.md


+ 15 - 0
RackPeek.Domain/Helpers/Normalize.cs

@@ -6,4 +6,19 @@ public static class Normalize
     {
         return value.Trim().ToLowerInvariant();
     }
+
+    public static string SystemName(string name)
+    {
+        return name.Trim();
+    }
+
+    public static string ServiceName(string name)
+    {
+        return name.Trim();
+    }
+
+    public static string HardwareName(string name)
+    {
+        return name.Trim();
+    }
 }

+ 1 - 1
RackPeek.Domain/Resources/Hardware/AccessPoints/AddAccessPointUseCase.cs

@@ -7,8 +7,8 @@ public class AddAccessPointUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
-
         var existing = await repository.GetByNameAsync(name);
         if (existing != null)
             throw new ConflictException($"Access point '{name}' already exists.");

+ 2 - 2
RackPeek.Domain/Resources/Hardware/AccessPoints/DeleteAccessPointUseCase.cs

@@ -8,8 +8,8 @@ public class DeleteAccessPointUseCase(IHardwareRepository repository, ISystemRep
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
-
         var ap = await repository.GetByNameAsync(name);
         if (ap is not AccessPoint)
             throw new NotFoundException($"Access point '{name}' not found.");
@@ -21,7 +21,7 @@ public class DeleteAccessPointUseCase(IHardwareRepository repository, ISystemRep
             systemResource.RunsOn = null;
             await systemsRepo.UpdateAsync(systemResource);
         }
-        
+
         await repository.DeleteAsync(name);
     }
 }

+ 1 - 1
RackPeek.Domain/Resources/Hardware/AccessPoints/DescribeAccessPointUseCase.cs

@@ -13,8 +13,8 @@ public class DescribeAccessPointUseCase(IHardwareRepository repository) : IUseCa
 {
     public async Task<AccessPointDescription?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
-
         var ap = await repository.GetByNameAsync(name) as AccessPoint;
         if (ap == null)
             return null;

+ 1 - 1
RackPeek.Domain/Resources/Hardware/AccessPoints/GetAccessPointUseCase.cs

@@ -7,8 +7,8 @@ public class GetAccessPointUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<AccessPoint?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
-
         var hardware = await repository.GetByNameAsync(name);
         return hardware as AccessPoint;
     }

+ 1 - 1
RackPeek.Domain/Resources/Hardware/AccessPoints/UpdateAccessPointUseCase.cs

@@ -11,8 +11,8 @@ public class UpdateAccessPointUseCase(IHardwareRepository repository) : IUseCase
         double? speed = null
     )
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
-
         var ap = await repository.GetByNameAsync(name) as AccessPoint;
         if (ap == null)
             throw new NotFoundException($"Access point '{name}' not found.");

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Desktops/AddDesktopUseCase.cs

@@ -7,6 +7,7 @@ public class AddDesktopUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var existing = await repository.GetByNameAsync(name);

+ 7 - 3
RackPeek.Domain/Resources/Hardware/Desktops/Cpus/AddDesktopCpuUseCase.cs

@@ -1,13 +1,17 @@
+using RackPeek.Domain.Helpers;
 using RackPeek.Domain.Resources.Hardware.Models;
 
 namespace RackPeek.Domain.Resources.Hardware.Desktops.Cpus;
 
 public class AddDesktopCpuUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string desktopName, Cpu cpu)
+    public async Task ExecuteAsync(string name, Cpu cpu)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
-                      ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
+
+        var desktop = await repository.GetByNameAsync(name) as Desktop
+                      ?? throw new InvalidOperationException($"Desktop '{name}' not found.");
 
         desktop.Cpus ??= new List<Cpu>();
         desktop.Cpus.Add(cpu);

+ 8 - 4
RackPeek.Domain/Resources/Hardware/Desktops/Cpus/RemoveDesktopCpuUseCase.cs

@@ -1,16 +1,20 @@
+using RackPeek.Domain.Helpers;
 using RackPeek.Domain.Resources.Hardware.Models;
 
 namespace RackPeek.Domain.Resources.Hardware.Desktops.Cpus;
 
 public class RemoveDesktopCpuUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string desktopName, int index)
+    public async Task ExecuteAsync(string name, int index)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
-                      ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
+
+        var desktop = await repository.GetByNameAsync(name) as Desktop
+                      ?? throw new InvalidOperationException($"Desktop '{name}' not found.");
 
         if (desktop.Cpus == null || index < 0 || index >= desktop.Cpus.Count)
-            throw new InvalidOperationException($"CPU index {index} not found on desktop '{desktopName}'.");
+            throw new InvalidOperationException($"CPU index {index} not found on desktop '{name}'.");
 
         desktop.Cpus.RemoveAt(index);
 

+ 8 - 4
RackPeek.Domain/Resources/Hardware/Desktops/Cpus/UpdateDesktopCpuUseCase.cs

@@ -1,16 +1,20 @@
+using RackPeek.Domain.Helpers;
 using RackPeek.Domain.Resources.Hardware.Models;
 
 namespace RackPeek.Domain.Resources.Hardware.Desktops.Cpus;
 
 public class UpdateDesktopCpuUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string desktopName, int index, Cpu updated)
+    public async Task ExecuteAsync(string name, int index, Cpu updated)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
-                      ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
+
+        var desktop = await repository.GetByNameAsync(name) as Desktop
+                      ?? throw new InvalidOperationException($"Desktop '{name}' not found.");
 
         if (desktop.Cpus == null || index < 0 || index >= desktop.Cpus.Count)
-            throw new InvalidOperationException($"CPU index {index} not found on desktop '{desktopName}'.");
+            throw new InvalidOperationException($"CPU index {index} not found on desktop '{name}'.");
 
         desktop.Cpus[index] = updated;
 

+ 2 - 1
RackPeek.Domain/Resources/Hardware/Desktops/DeleteDesktopUseCase.cs

@@ -7,6 +7,7 @@ public class DeleteDesktopUseCase(IHardwareRepository repository, ISystemReposit
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var hardware = await repository.GetByNameAsync(name);
@@ -20,7 +21,7 @@ public class DeleteDesktopUseCase(IHardwareRepository repository, ISystemReposit
             systemResource.RunsOn = null;
             await systemsRepo.UpdateAsync(systemResource);
         }
-        
+
         await repository.DeleteAsync(name);
     }
 }

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Desktops/DescribeDesktopUseCase.cs

@@ -17,6 +17,7 @@ public class DescribeDesktopUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<DesktopDescription?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var desktop = await repository.GetByNameAsync(name) as Desktop;

+ 7 - 3
RackPeek.Domain/Resources/Hardware/Desktops/Drives/AddDesktopDriveUseCase.cs

@@ -1,13 +1,17 @@
+using RackPeek.Domain.Helpers;
 using RackPeek.Domain.Resources.Hardware.Models;
 
 namespace RackPeek.Domain.Resources.Hardware.Desktops.Drives;
 
 public class AddDesktopDriveUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string desktopName, Drive drive)
+    public async Task ExecuteAsync(string name, Drive drive)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
-                      ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
+
+        var desktop = await repository.GetByNameAsync(name) as Desktop
+                      ?? throw new InvalidOperationException($"Desktop '{name}' not found.");
 
         desktop.Drives ??= new List<Drive>();
         desktop.Drives.Add(drive);

+ 8 - 4
RackPeek.Domain/Resources/Hardware/Desktops/Drives/RemoveDesktopDriveUseCase.cs

@@ -1,16 +1,20 @@
+using RackPeek.Domain.Helpers;
 using RackPeek.Domain.Resources.Hardware.Models;
 
 namespace RackPeek.Domain.Resources.Hardware.Desktops.Drives;
 
 public class RemoveDesktopDriveUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string desktopName, int index)
+    public async Task ExecuteAsync(string name, int index)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
-                      ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
+
+        var desktop = await repository.GetByNameAsync(name) as Desktop
+                      ?? throw new InvalidOperationException($"Desktop '{name}' not found.");
 
         if (desktop.Drives == null || index < 0 || index >= desktop.Drives.Count)
-            throw new InvalidOperationException($"Drive index {index} not found on desktop '{desktopName}'.");
+            throw new InvalidOperationException($"Drive index {index} not found on desktop '{name}'.");
 
         desktop.Drives.RemoveAt(index);
 

+ 8 - 4
RackPeek.Domain/Resources/Hardware/Desktops/Drives/UpdateDesktopDriveUseCase.cs

@@ -1,16 +1,20 @@
+using RackPeek.Domain.Helpers;
 using RackPeek.Domain.Resources.Hardware.Models;
 
 namespace RackPeek.Domain.Resources.Hardware.Desktops.Drives;
 
 public class UpdateDesktopDriveUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string desktopName, int index, Drive updated)
+    public async Task ExecuteAsync(string name, int index, Drive updated)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
-                      ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
+
+        var desktop = await repository.GetByNameAsync(name) as Desktop
+                      ?? throw new InvalidOperationException($"Desktop '{name}' not found.");
 
         if (desktop.Drives == null || index < 0 || index >= desktop.Drives.Count)
-            throw new InvalidOperationException($"Drive index {index} not found on desktop '{desktopName}'.");
+            throw new InvalidOperationException($"Drive index {index} not found on desktop '{name}'.");
 
         desktop.Drives[index] = updated;
 

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Desktops/GetDesktopUseCase.cs

@@ -7,6 +7,7 @@ public class GetDesktopUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<Desktop?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var hardware = await repository.GetByNameAsync(name);

+ 7 - 3
RackPeek.Domain/Resources/Hardware/Desktops/Gpus/AddDesktopGpuUseCase.cs

@@ -1,13 +1,17 @@
+using RackPeek.Domain.Helpers;
 using RackPeek.Domain.Resources.Hardware.Models;
 
 namespace RackPeek.Domain.Resources.Hardware.Desktops.Gpus;
 
 public class AddDesktopGpuUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string desktopName, Gpu gpu)
+    public async Task ExecuteAsync(string name, Gpu gpu)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
-                      ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
+
+        var desktop = await repository.GetByNameAsync(name) as Desktop
+                      ?? throw new InvalidOperationException($"Desktop '{name}' not found.");
 
         desktop.Gpus ??= new List<Gpu>();
         desktop.Gpus.Add(gpu);

+ 8 - 4
RackPeek.Domain/Resources/Hardware/Desktops/Gpus/RemoveDesktopGpuUseCase.cs

@@ -1,16 +1,20 @@
+using RackPeek.Domain.Helpers;
 using RackPeek.Domain.Resources.Hardware.Models;
 
 namespace RackPeek.Domain.Resources.Hardware.Desktops.Gpus;
 
 public class RemoveDesktopGpuUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string desktopName, int index)
+    public async Task ExecuteAsync(string name, int index)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
-                      ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
+
+        var desktop = await repository.GetByNameAsync(name) as Desktop
+                      ?? throw new InvalidOperationException($"Desktop '{name}' not found.");
 
         if (desktop.Gpus == null || index < 0 || index >= desktop.Gpus.Count)
-            throw new InvalidOperationException($"GPU index {index} not found on desktop '{desktopName}'.");
+            throw new InvalidOperationException($"GPU index {index} not found on desktop '{name}'.");
 
         desktop.Gpus.RemoveAt(index);
 

+ 8 - 4
RackPeek.Domain/Resources/Hardware/Desktops/Gpus/UpdateDesktopGpuUseCase.cs

@@ -1,16 +1,20 @@
+using RackPeek.Domain.Helpers;
 using RackPeek.Domain.Resources.Hardware.Models;
 
 namespace RackPeek.Domain.Resources.Hardware.Desktops.Gpus;
 
 public class UpdateDesktopGpuUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string desktopName, int index, Gpu updated)
+    public async Task ExecuteAsync(string name, int index, Gpu updated)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
-                      ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
+
+        var desktop = await repository.GetByNameAsync(name) as Desktop
+                      ?? throw new InvalidOperationException($"Desktop '{name}' not found.");
 
         if (desktop.Gpus == null || index < 0 || index >= desktop.Gpus.Count)
-            throw new InvalidOperationException($"GPU index {index} not found on desktop '{desktopName}'.");
+            throw new InvalidOperationException($"GPU index {index} not found on desktop '{name}'.");
 
         desktop.Gpus[index] = updated;
 

+ 7 - 3
RackPeek.Domain/Resources/Hardware/Desktops/Nics/AddDesktopNicUseCase.cs

@@ -1,13 +1,17 @@
+using RackPeek.Domain.Helpers;
 using RackPeek.Domain.Resources.Hardware.Models;
 
 namespace RackPeek.Domain.Resources.Hardware.Desktops.Nics;
 
 public class AddDesktopNicUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string desktopName, Nic nic)
+    public async Task ExecuteAsync(string name, Nic nic)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
-                      ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
+
+        var desktop = await repository.GetByNameAsync(name) as Desktop
+                      ?? throw new InvalidOperationException($"Desktop '{name}' not found.");
 
         desktop.Nics ??= new List<Nic>();
         desktop.Nics.Add(nic);

+ 8 - 4
RackPeek.Domain/Resources/Hardware/Desktops/Nics/RemoveDesktopNicUseCase.cs

@@ -1,16 +1,20 @@
+using RackPeek.Domain.Helpers;
 using RackPeek.Domain.Resources.Hardware.Models;
 
 namespace RackPeek.Domain.Resources.Hardware.Desktops.Nics;
 
 public class RemoveDesktopNicUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string desktopName, int index)
+    public async Task ExecuteAsync(string name, int index)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
-                      ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
+
+        var desktop = await repository.GetByNameAsync(name) as Desktop
+                      ?? throw new InvalidOperationException($"Desktop '{name}' not found.");
 
         if (desktop.Nics == null || index < 0 || index >= desktop.Nics.Count)
-            throw new InvalidOperationException($"NIC index {index} not found on desktop '{desktopName}'.");
+            throw new InvalidOperationException($"NIC index {index} not found on desktop '{name}'.");
 
         desktop.Nics.RemoveAt(index);
 

+ 8 - 4
RackPeek.Domain/Resources/Hardware/Desktops/Nics/UpdateDesktopNicUseCase.cs

@@ -1,16 +1,20 @@
+using RackPeek.Domain.Helpers;
 using RackPeek.Domain.Resources.Hardware.Models;
 
 namespace RackPeek.Domain.Resources.Hardware.Desktops.Nics;
 
 public class UpdateDesktopNicUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string desktopName, int index, Nic updated)
+    public async Task ExecuteAsync(string name, int index, Nic updated)
     {
-        var desktop = await repository.GetByNameAsync(desktopName) as Desktop
-                      ?? throw new InvalidOperationException($"Desktop '{desktopName}' not found.");
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
+
+        var desktop = await repository.GetByNameAsync(name) as Desktop
+                      ?? throw new InvalidOperationException($"Desktop '{name}' not found.");
 
         if (desktop.Nics == null || index < 0 || index >= desktop.Nics.Count)
-            throw new InvalidOperationException($"NIC index {index} not found on desktop '{desktopName}'.");
+            throw new InvalidOperationException($"NIC index {index} not found on desktop '{name}'.");
 
         desktop.Nics[index] = updated;
 

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Desktops/UpdateDesktopUseCase.cs

@@ -10,6 +10,7 @@ public class UpdateDesktopUseCase(IHardwareRepository repository) : IUseCase
         string? model = null
     )
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var desktop = await repository.GetByNameAsync(name) as Desktop;

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Firewalls/AddFirewallUseCase.cs

@@ -7,6 +7,7 @@ public class AddFirewallUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         // basic guard rails

+ 2 - 1
RackPeek.Domain/Resources/Hardware/Firewalls/DeleteFirewallUseCase.cs

@@ -8,6 +8,7 @@ public class DeleteFirewallUseCase(IHardwareRepository repository, ISystemReposi
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         if (await repository.GetByNameAsync(name) is not Firewall hardware)
@@ -20,7 +21,7 @@ public class DeleteFirewallUseCase(IHardwareRepository repository, ISystemReposi
             systemResource.RunsOn = null;
             await systemsRepo.UpdateAsync(systemResource);
         }
-        
+
         await repository.DeleteAsync(name);
     }
 }

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Firewalls/DescribeFirewallUseCase.cs

@@ -17,6 +17,7 @@ public class DescribeFirewallUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<FirewallDescription?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var firewallResource = await repository.GetByNameAsync(name) as Firewall;

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Firewalls/GetFirewallUseCase.cs

@@ -7,6 +7,7 @@ public class GetFirewallUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<Firewall?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var hardware = await repository.GetByNameAsync(name);

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Firewalls/UpdateFirewallUseCase.cs

@@ -12,6 +12,7 @@ public class UpdateFirewallUseCase(IHardwareRepository repository) : IUseCase
         bool? poe = null
     )
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var firewallResource = await repository.GetByNameAsync(name) as Firewall;

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Laptops/AddLaptopUseCase.cs

@@ -7,6 +7,7 @@ public class AddLaptopUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var existing = await repository.GetByNameAsync(name);

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Laptops/Cpus/AddDesktopCpuUseCase.cs

@@ -7,6 +7,7 @@ public class AddLaptopCpuUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name, Cpu cpu)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
         var laptop = await repository.GetByNameAsync(name) as Laptop
                      ?? throw new InvalidOperationException($"Laptop '{name}' not found.");

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Laptops/Cpus/RemoveDesktopCpuUseCase.cs

@@ -7,6 +7,7 @@ public class RemoveLaptopCpuUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name, int index)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var laptop = await repository.GetByNameAsync(name) as Laptop

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Laptops/Cpus/UpdateDesktopCpuUseCase.cs

@@ -7,6 +7,7 @@ public class UpdateLaptopCpuUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name, int index, Cpu updated)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
         var laptop = await repository.GetByNameAsync(name) as Laptop
                      ?? throw new InvalidOperationException($"Laptop '{name}' not found.");

+ 2 - 1
RackPeek.Domain/Resources/Hardware/Laptops/DeleteLaptopUseCase.cs

@@ -7,6 +7,7 @@ public class DeleteLaptopUseCase(IHardwareRepository repository, ISystemReposito
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var hardware = await repository.GetByNameAsync(name);
@@ -20,7 +21,7 @@ public class DeleteLaptopUseCase(IHardwareRepository repository, ISystemReposito
             systemResource.RunsOn = null;
             await systemsRepo.UpdateAsync(systemResource);
         }
-        
+
         await repository.DeleteAsync(name);
     }
 }

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Laptops/DescribeLaptopUseCase.cs

@@ -7,6 +7,7 @@ public class DescribeLaptopUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<LaptopDescription?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var laptop = await repository.GetByNameAsync(name) as Laptop;

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Laptops/Drives/AddDesktopDriveUseCase.cs

@@ -7,6 +7,7 @@ public class AddLaptopDriveUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name, Drive drive)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var laptop = await repository.GetByNameAsync(name) as Laptop

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Laptops/Drives/RemoveDesktopDriveUseCase.cs

@@ -7,6 +7,7 @@ public class RemoveLaptopDriveUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name, int index)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
         var laptop = await repository.GetByNameAsync(name) as Laptop
                      ?? throw new InvalidOperationException($"Laptop '{name}' not found.");

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Laptops/Drives/UpdateDesktopDriveUseCase.cs

@@ -7,6 +7,7 @@ public class UpdateLaptopDriveUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name, int index, Drive updated)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var laptop = await repository.GetByNameAsync(name) as Laptop

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Laptops/GetDesktopUseCase.cs

@@ -7,6 +7,7 @@ public class GetLaptopUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<Laptop?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var hardware = await repository.GetByNameAsync(name);

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Laptops/Gpus/AddDesktopGpuUseCase.cs

@@ -7,6 +7,7 @@ public class AddLaptopGpuUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name, Gpu gpu)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
         var laptop = await repository.GetByNameAsync(name) as Laptop
                      ?? throw new InvalidOperationException($"Laptop '{name}' not found.");

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Laptops/Gpus/RemoveDesktopGpuUseCase.cs

@@ -7,6 +7,7 @@ public class RemoveLaptopGpuUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name, int index)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
         var laptop = await repository.GetByNameAsync(name) as Laptop
                      ?? throw new InvalidOperationException($"Laptop '{name}' not found.");

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Laptops/Gpus/UpdateDesktopGpuUseCase.cs

@@ -7,6 +7,7 @@ public class UpdateLaptopGpuUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name, int index, Gpu updated)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var laptop = await repository.GetByNameAsync(name) as Laptop

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Routers/AddRouterUseCase.cs

@@ -7,6 +7,7 @@ public class AddRouterUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         // basic guard rails

+ 2 - 1
RackPeek.Domain/Resources/Hardware/Routers/DeleteRouterUseCase.cs

@@ -8,6 +8,7 @@ public class DeleteRouterUseCase(IHardwareRepository repository, ISystemReposito
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         if (await repository.GetByNameAsync(name) is not Router hardware)
@@ -20,7 +21,7 @@ public class DeleteRouterUseCase(IHardwareRepository repository, ISystemReposito
             systemResource.RunsOn = null;
             await systemsRepo.UpdateAsync(systemResource);
         }
-        
+
         await repository.DeleteAsync(name);
     }
 }

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Routers/DescribeRouterUseCase.cs

@@ -17,6 +17,7 @@ public class DescribeRouterUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<RouterDescription?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var routerResource = await repository.GetByNameAsync(name) as Router;

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Routers/GetRouterUseCase.cs

@@ -7,6 +7,7 @@ public class GetRouterUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<Router?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var hardware = await repository.GetByNameAsync(name);

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Routers/UpdateRouterUseCase.cs

@@ -12,6 +12,7 @@ public class UpdateRouterUseCase(IHardwareRepository repository) : IUseCase
         bool? poe = null
     )
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var routerResource = await repository.GetByNameAsync(name) as Router;

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Servers/AddServerUseCase.cs

@@ -7,6 +7,7 @@ public class AddServerUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         // basic guard rails

+ 4 - 3
RackPeek.Domain/Resources/Hardware/Servers/Cpus/AddCpuUseCase.cs

@@ -6,14 +6,15 @@ namespace RackPeek.Domain.Resources.Hardware.Servers.Cpus;
 public class AddCpuUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(
-        string serverName,
+        string name,
         string model,
         int cores,
         int threads)
     {
-        ThrowIfInvalid.ResourceName(serverName);
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
 
-        var hardware = await repository.GetByNameAsync(serverName);
+        var hardware = await repository.GetByNameAsync(name);
 
         if (hardware is not Server server) return;
 

+ 4 - 3
RackPeek.Domain/Resources/Hardware/Servers/Cpus/RemoveCpuUseCase.cs

@@ -6,12 +6,13 @@ namespace RackPeek.Domain.Resources.Hardware.Servers.Cpus;
 public class RemoveCpuUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(
-        string serverName,
+        string name,
         int index)
     {
-        ThrowIfInvalid.ResourceName(serverName);
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
 
-        var hardware = await repository.GetByNameAsync(serverName);
+        var hardware = await repository.GetByNameAsync(name);
         if (hardware is not Server server) return;
 
         server.Cpus ??= [];

+ 4 - 3
RackPeek.Domain/Resources/Hardware/Servers/Cpus/UpdateCpuUseCase.cs

@@ -6,15 +6,16 @@ namespace RackPeek.Domain.Resources.Hardware.Servers.Cpus;
 public class UpdateCpuUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(
-        string serverName,
+        string name,
         int index,
         string model,
         int cores,
         int threads)
     {
-        ThrowIfInvalid.ResourceName(serverName);
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
 
-        var hardware = await repository.GetByNameAsync(serverName);
+        var hardware = await repository.GetByNameAsync(name);
 
         if (hardware is not Server server) return;
 

+ 2 - 1
RackPeek.Domain/Resources/Hardware/Servers/DeleteServerUseCase.cs

@@ -8,6 +8,7 @@ public class DeleteServerUseCase(IHardwareRepository repository, ISystemReposito
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var hardware = await repository.GetByNameAsync(name) as Server;
@@ -21,7 +22,7 @@ public class DeleteServerUseCase(IHardwareRepository repository, ISystemReposito
             systemResource.RunsOn = null;
             await systemsRepo.UpdateAsync(systemResource);
         }
-        
+
         await repository.DeleteAsync(name);
     }
 }

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Servers/DescribeServerUseCase.cs

@@ -18,6 +18,7 @@ public class DescribeServerUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<ServerDescription?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var server = await repository.GetByNameAsync(name) as Server;

+ 4 - 3
RackPeek.Domain/Resources/Hardware/Servers/Drives/AddDriveUseCase.cs

@@ -6,13 +6,14 @@ namespace RackPeek.Domain.Resources.Hardware.Servers.Drives;
 public class AddDrivesUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(
-        string serverName,
+        string name,
         string type,
         int size)
     {
-        ThrowIfInvalid.ResourceName(serverName);
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
 
-        var hardware = await repository.GetByNameAsync(serverName);
+        var hardware = await repository.GetByNameAsync(name);
 
         if (hardware is not Server server) return;
 

+ 4 - 3
RackPeek.Domain/Resources/Hardware/Servers/Drives/RemoveDriveUseCase.cs

@@ -5,11 +5,12 @@ namespace RackPeek.Domain.Resources.Hardware.Servers.Drives;
 
 public class RemoveDriveUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string serverName, int index)
+    public async Task ExecuteAsync(string name, int index)
     {
-        ThrowIfInvalid.ResourceName(serverName);
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
 
-        var hardware = await repository.GetByNameAsync(serverName);
+        var hardware = await repository.GetByNameAsync(name);
         if (hardware is not Server server) return;
         server.Drives ??= [];
         if (index < 0 || index >= server.Drives.Count)

+ 4 - 3
RackPeek.Domain/Resources/Hardware/Servers/Drives/UpdateDriveUseCase.cs

@@ -5,11 +5,12 @@ namespace RackPeek.Domain.Resources.Hardware.Servers.Drives;
 
 public class UpdateDriveUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string serverName, int index, string type, int size)
+    public async Task ExecuteAsync(string name, int index, string type, int size)
     {
-        ThrowIfInvalid.ResourceName(serverName);
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
 
-        var hardware = await repository.GetByNameAsync(serverName);
+        var hardware = await repository.GetByNameAsync(name);
         if (hardware is not Server server) return;
 
         server.Drives ??= [];

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Servers/GetServerUseCase.cs

@@ -7,6 +7,7 @@ public class GetServerUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<Server?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
         var hardware = await repository.GetByNameAsync(name);
         return hardware as Server;

+ 5 - 4
RackPeek.Domain/Resources/Hardware/Servers/Gpus/AddGpuUseCase.cs

@@ -6,16 +6,17 @@ namespace RackPeek.Domain.Resources.Hardware.Servers.Gpus;
 public class AddGpuUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(
-        string serverName,
+        string name,
         string model,
         int vram)
     {
-        ThrowIfInvalid.ResourceName(serverName);
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
 
-        var hardware = await repository.GetByNameAsync(serverName);
+        var hardware = await repository.GetByNameAsync(name);
 
         if (hardware is not Server server)
-            throw new NotFoundException($"Server '{serverName}' not found.");
+            throw new NotFoundException($"Server '{name}' not found.");
 
         server.Gpus ??= [];
 

+ 4 - 3
RackPeek.Domain/Resources/Hardware/Servers/Gpus/RemoveGpuUseCase.cs

@@ -5,11 +5,12 @@ namespace RackPeek.Domain.Resources.Hardware.Servers.Gpus;
 
 public class RemoveGpuUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string serverName, int index)
+    public async Task ExecuteAsync(string name, int index)
     {
-        ThrowIfInvalid.ResourceName(serverName);
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
 
-        var hardware = await repository.GetByNameAsync(serverName);
+        var hardware = await repository.GetByNameAsync(name);
 
         if (hardware is not Server server)
             return;

+ 4 - 3
RackPeek.Domain/Resources/Hardware/Servers/Gpus/UpdateGpuUseCase.cs

@@ -6,14 +6,15 @@ namespace RackPeek.Domain.Resources.Hardware.Servers.Gpus;
 public class UpdateGpuUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(
-        string serverName,
+        string name,
         int index,
         string model,
         int vram)
     {
-        ThrowIfInvalid.ResourceName(serverName);
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
 
-        var hardware = await repository.GetByNameAsync(serverName);
+        var hardware = await repository.GetByNameAsync(name);
 
         if (hardware is not Server server)
             return;

+ 5 - 4
RackPeek.Domain/Resources/Hardware/Servers/Nics/AddNicUseCase.cs

@@ -6,22 +6,23 @@ namespace RackPeek.Domain.Resources.Hardware.Servers.Nics;
 public class AddNicUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(
-        string serverName,
+        string name,
         string type,
         int speed,
         int ports)
     {
-        ThrowIfInvalid.ResourceName(serverName);
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
         ThrowIfInvalid.NicSpeed(speed);
         ThrowIfInvalid.NicPorts(ports);
 
         var nicType = Normalize.NicType(type);
         ThrowIfInvalid.NicType(nicType);
 
-        var hardware = await repository.GetByNameAsync(serverName);
+        var hardware = await repository.GetByNameAsync(name);
 
         if (hardware is not Server server)
-            throw new NotFoundException($"Server: '{serverName}' not found.");
+            throw new NotFoundException($"Server: '{name}' not found.");
 
         server.Nics ??= [];
 

+ 5 - 4
RackPeek.Domain/Resources/Hardware/Servers/Nics/RemoveNicUseCase.cs

@@ -6,13 +6,14 @@ namespace RackPeek.Domain.Resources.Hardware.Servers.Nics;
 
 public class RemoveNicUseCase(IHardwareRepository repository) : IUseCase
 {
-    public async Task ExecuteAsync(string serverName, int index)
+    public async Task ExecuteAsync(string name, int index)
     {
-        ThrowIfInvalid.ResourceName(serverName);
-        var hardware = await repository.GetByNameAsync(serverName);
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
+        var hardware = await repository.GetByNameAsync(name);
 
         if (hardware is not Server server)
-            throw new NotFoundException($"Server: '{serverName}' not found.");
+            throw new NotFoundException($"Server: '{name}' not found.");
 
         server.Nics ??= [];
 

+ 5 - 4
RackPeek.Domain/Resources/Hardware/Servers/Nics/UpdateNicUseCase.cs

@@ -7,23 +7,24 @@ namespace RackPeek.Domain.Resources.Hardware.Servers.Nics;
 public class UpdateNicUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(
-        string serverName,
+        string name,
         int index,
         string type,
         int speed,
         int ports)
     {
-        ThrowIfInvalid.ResourceName(serverName);
+        name = Normalize.HardwareName(name);
+        ThrowIfInvalid.ResourceName(name);
         ThrowIfInvalid.NicSpeed(speed);
         ThrowIfInvalid.NicPorts(ports);
 
         var nicType = Normalize.NicType(type);
         ThrowIfInvalid.NicType(nicType);
 
-        var hardware = await repository.GetByNameAsync(serverName);
+        var hardware = await repository.GetByNameAsync(name);
 
         if (hardware is not Server server)
-            throw new NotFoundException($"Server: '{serverName}' not found.");
+            throw new NotFoundException($"Server: '{name}' not found.");
 
         server.Nics ??= [];
 

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Servers/UpdateServerUseCase.cs

@@ -11,6 +11,7 @@ public class UpdateServerUseCase(IHardwareRepository repository) : IUseCase
         bool? ipmi = null
     )
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var server = await repository.GetByNameAsync(name) as Server;

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Switches/AddSwitchUseCase.cs

@@ -7,6 +7,7 @@ public class AddSwitchUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         // basic guard rails

+ 2 - 1
RackPeek.Domain/Resources/Hardware/Switches/DeleteSwitchUseCase.cs

@@ -8,6 +8,7 @@ public class DeleteSwitchUseCase(IHardwareRepository repository, ISystemReposito
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         if (await repository.GetByNameAsync(name) is not Switch hardware)
@@ -20,7 +21,7 @@ public class DeleteSwitchUseCase(IHardwareRepository repository, ISystemReposito
             systemResource.RunsOn = null;
             await systemsRepo.UpdateAsync(systemResource);
         }
-        
+
         await repository.DeleteAsync(name);
     }
 }

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Switches/DescribeSwitchUseCase.cs

@@ -17,6 +17,7 @@ public class DescribeSwitchUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<SwitchDescription?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var switchResource = await repository.GetByNameAsync(name) as Switch;

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Switches/GetSwitchUseCase.cs

@@ -7,6 +7,7 @@ public class GetSwitchUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<Switch?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var hardware = await repository.GetByNameAsync(name);

+ 1 - 0
RackPeek.Domain/Resources/Hardware/Switches/UpdateSwitchUseCase.cs

@@ -12,6 +12,7 @@ public class UpdateSwitchUseCase(IHardwareRepository repository) : IUseCase
         bool? poe = null
     )
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var switchResource = await repository.GetByNameAsync(name) as Switch;

+ 1 - 0
RackPeek.Domain/Resources/Hardware/UpsUnits/AddUpsUseCase.cs

@@ -7,6 +7,7 @@ public class AddUpsUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var existing = await repository.GetByNameAsync(name);

+ 2 - 1
RackPeek.Domain/Resources/Hardware/UpsUnits/DeleteUpsUseCase.cs

@@ -8,6 +8,7 @@ public class DeleteUpsUseCase(IHardwareRepository repository, ISystemRepository
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         if (await repository.GetByNameAsync(name) is not Ups ups)
@@ -20,7 +21,7 @@ public class DeleteUpsUseCase(IHardwareRepository repository, ISystemRepository
             systemResource.RunsOn = null;
             await systemsRepo.UpdateAsync(systemResource);
         }
-        
+
         await repository.DeleteAsync(name);
     }
 }

+ 1 - 0
RackPeek.Domain/Resources/Hardware/UpsUnits/DescribeUpsUseCase.cs

@@ -13,6 +13,7 @@ public class DescribeUpsUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<UpsDescription?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var ups = await repository.GetByNameAsync(name) as Ups;

+ 1 - 0
RackPeek.Domain/Resources/Hardware/UpsUnits/GetUpsUnitUseCase.cs

@@ -7,6 +7,7 @@ public class GetUpsUnitUseCase(IHardwareRepository repository) : IUseCase
 {
     public async Task<Ups?> ExecuteAsync(string name)
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var hardware = await repository.GetByNameAsync(name);

+ 1 - 0
RackPeek.Domain/Resources/Hardware/UpsUnits/UpdateUpsUseCase.cs

@@ -11,6 +11,7 @@ public class UpdateUpsUseCase(IHardwareRepository repository) : IUseCase
         int? va = null
     )
     {
+        name = Normalize.HardwareName(name);
         ThrowIfInvalid.ResourceName(name);
 
         var ups = await repository.GetByNameAsync(name) as Ups;

+ 1 - 0
RackPeek.Domain/Resources/Services/UseCases/AddServiceUseCase.cs

@@ -6,6 +6,7 @@ public class AddServiceUseCase(IServiceRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.ServiceName(name);
         ThrowIfInvalid.ResourceName(name);
         // basic guard rails
         var existing = await repository.GetByNameAsync(name);

+ 1 - 0
RackPeek.Domain/Resources/Services/UseCases/DeleteServiceUseCase.cs

@@ -6,6 +6,7 @@ public class DeleteServiceUseCase(IServiceRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.ServiceName(name);
         ThrowIfInvalid.ResourceName(name);
         if (await repository.GetByNameAsync(name) is not Service)
             throw new InvalidOperationException($"Service '{name}' not found.");

+ 1 - 0
RackPeek.Domain/Resources/Services/UseCases/DescribeServiceUseCase.cs

@@ -17,6 +17,7 @@ public class DescribeServiceUseCase(IServiceRepository repository, ISystemReposi
 {
     public async Task<ServiceDescription?> ExecuteAsync(string name)
     {
+        name = Normalize.ServiceName(name);
         ThrowIfInvalid.ResourceName(name);
         var service = await repository.GetByNameAsync(name);
         if (service is null)

+ 1 - 0
RackPeek.Domain/Resources/Services/UseCases/GetServiceUseCase.cs

@@ -6,6 +6,7 @@ public class GetServiceUseCase(IServiceRepository repository) : IUseCase
 {
     public async Task<Service?> ExecuteAsync(string name)
     {
+        name = Normalize.ServiceName(name);
         ThrowIfInvalid.ResourceName(name);
         return await repository.GetByNameAsync(name);
     }

+ 9 - 2
RackPeek.Domain/Resources/Services/UseCases/UpdateServiceUseCase.cs

@@ -1,8 +1,9 @@
 using RackPeek.Domain.Helpers;
+using RackPeek.Domain.Resources.SystemResources;
 
 namespace RackPeek.Domain.Resources.Services.UseCases;
 
-public class UpdateServiceUseCase(IServiceRepository repository) : IUseCase
+public class UpdateServiceUseCase(IServiceRepository repository, ISystemRepository systemRepo) : IUseCase
 {
     public async Task ExecuteAsync(
         string name,
@@ -13,10 +14,11 @@ public class UpdateServiceUseCase(IServiceRepository repository) : IUseCase
         string? runsOn = null
     )
     {
+        name = Normalize.ServiceName(name);
         ThrowIfInvalid.ResourceName(name);
         var service = await repository.GetByNameAsync(name);
         if (service is null)
-            throw new InvalidOperationException($"Service '{name}' not found.");
+            throw new NotFoundException($"Service '{name}' not found.");
 
         if (!string.IsNullOrWhiteSpace(ip))
         {
@@ -43,7 +45,12 @@ public class UpdateServiceUseCase(IServiceRepository repository) : IUseCase
         }
 
         if (!string.IsNullOrWhiteSpace(runsOn))
+        {
+            ThrowIfInvalid.ResourceName(runsOn);
+            var parentSystem = await systemRepo.GetByNameAsync(runsOn);
+            if (parentSystem == null) throw new NotFoundException($"Parent system '{runsOn}' not found.");
             service.RunsOn = runsOn;
+        }
 
         await repository.UpdateAsync(service);
     }

+ 1 - 0
RackPeek.Domain/Resources/SystemResources/UseCases/AddSystemUseCase.cs

@@ -6,6 +6,7 @@ public class AddSystemUseCase(ISystemRepository repository) : IUseCase
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.SystemName(name);
         ThrowIfInvalid.ResourceName(name);
         // basic guard rails
         var existing = await repository.GetByNameAsync(name);

+ 4 - 3
RackPeek.Domain/Resources/SystemResources/UseCases/DeleteSystemUseCase.cs

@@ -7,11 +7,12 @@ public class DeleteSystemUseCase(ISystemRepository repository, IServiceRepositor
 {
     public async Task ExecuteAsync(string name)
     {
+        name = Normalize.SystemName(name);
         ThrowIfInvalid.ResourceName(name);
-        
+
         if (await repository.GetByNameAsync(name) is not SystemResource)
             throw new NotFoundException($"System '{name}' not found.");
-        
+
         // Break link to dependants
         var dependants = await serviceRepo.GetBySystemHostAsync(name);
         foreach (var serviceResource in dependants)
@@ -19,7 +20,7 @@ public class DeleteSystemUseCase(ISystemRepository repository, IServiceRepositor
             serviceResource.RunsOn = null;
             await serviceRepo.UpdateAsync(serviceResource);
         }
-        
+
         await repository.DeleteAsync(name);
     }
 }

+ 1 - 0
RackPeek.Domain/Resources/SystemResources/UseCases/DescribeSystemUseCase.cs

@@ -16,6 +16,7 @@ public class DescribeSystemUseCase(ISystemRepository repository) : IUseCase
 {
     public async Task<SystemDescription?> ExecuteAsync(string name)
     {
+        name = Normalize.SystemName(name);
         ThrowIfInvalid.ResourceName(name);
         var system = await repository.GetByNameAsync(name);
         if (system is null)

+ 4 - 3
RackPeek.Domain/Resources/SystemResources/UseCases/GetSystemServiceTreeUseCase.cs

@@ -8,10 +8,11 @@ public class GetSystemServiceTreeUseCase(
     ISystemRepository systemRepository,
     IServiceRepository serviceRepository) : IUseCase
 {
-    public async Task<SystemDependencyTree?> ExecuteAsync(string systemName)
+    public async Task<SystemDependencyTree?> ExecuteAsync(string name)
     {
-        ThrowIfInvalid.ResourceName(systemName);
-        var system = await systemRepository.GetByNameAsync(systemName);
+        name = Normalize.SystemName(name);
+        ThrowIfInvalid.ResourceName(name);
+        var system = await systemRepository.GetByNameAsync(name);
         if (system is null) return null;
 
         var services = await serviceRepository.GetBySystemHostAsync(system.Name);

+ 1 - 0
RackPeek.Domain/Resources/SystemResources/UseCases/GetSystemUseCase.cs

@@ -6,6 +6,7 @@ public class GetSystemUseCase(ISystemRepository repository) : IUseCase
 {
     public async Task<SystemResource?> ExecuteAsync(string name)
     {
+        name = Normalize.SystemName(name);
         ThrowIfInvalid.ResourceName(name);
         return await repository.GetByNameAsync(name);
     }

+ 9 - 1
RackPeek.Domain/Resources/SystemResources/UseCases/UpdateSystemUseCase.cs

@@ -1,8 +1,9 @@
 using RackPeek.Domain.Helpers;
+using RackPeek.Domain.Resources.Hardware;
 
 namespace RackPeek.Domain.Resources.SystemResources.UseCases;
 
-public class UpdateSystemUseCase(ISystemRepository repository) : IUseCase
+public class UpdateSystemUseCase(ISystemRepository repository, IHardwareRepository hardwareRepo) : IUseCase
 {
     public async Task ExecuteAsync(
         string name,
@@ -13,6 +14,7 @@ public class UpdateSystemUseCase(ISystemRepository repository) : IUseCase
         string? runsOn = null
     )
     {
+        name = Normalize.SystemName(name);
         ThrowIfInvalid.ResourceName(name);
         var system = await repository.GetByNameAsync(name);
         if (system is null)
@@ -31,7 +33,13 @@ public class UpdateSystemUseCase(ISystemRepository repository) : IUseCase
             system.Ram = ram.Value;
 
         if (!string.IsNullOrWhiteSpace(runsOn))
+        {
+            ThrowIfInvalid.ResourceName(runsOn);
+            var parentHardware = await hardwareRepo.GetByNameAsync(runsOn);
+            if (parentHardware == null) throw new NotFoundException($"Parent hardware '{runsOn}' not found.");
             system.RunsOn = runsOn;
+        }
+
 
         await repository.UpdateAsync(system);
     }

+ 23 - 3
Tests/EndToEnd/ServiceYamlE2ETests.cs

@@ -37,6 +37,7 @@ public class ServiceYamlE2ETests(TempYamlCliFixture fs, ITestOutputHelper output
                        tags: 
 
                      """, yaml);
+        (output, yaml) = await ExecuteAsync("systems", "add", "vm01");
 
         // Update system
         (output, yaml) = await ExecuteAsync("services", "set", "immich", "--ip", "192.168.10.14", "--port", "80",
@@ -46,6 +47,15 @@ public class ServiceYamlE2ETests(TempYamlCliFixture fs, ITestOutputHelper output
 
         Assert.Equal("""
                      resources:
+                     - kind: System
+                       type: 
+                       os: 
+                       cores: 
+                       ram: 
+                       drives: 
+                       runsOn: 
+                       name: vm01
+                       tags: 
                      - kind: Service
                        network:
                          ip: 192.168.10.14
@@ -66,7 +76,16 @@ public class ServiceYamlE2ETests(TempYamlCliFixture fs, ITestOutputHelper output
                      """, output);
 
         Assert.Equal("""
-                     resources: []
+                     resources:
+                     - kind: System
+                       type: 
+                       os: 
+                       cores: 
+                       ram: 
+                       drives: 
+                       runsOn: 
+                       name: vm01
+                       tags: 
 
                      """, yaml);
 
@@ -87,12 +106,13 @@ public class ServiceYamlE2ETests(TempYamlCliFixture fs, ITestOutputHelper output
         var (output, yaml) = await ExecuteAsync("services", "add", "immich");
         Assert.Equal("Service 'immich' added.\n", output);
 
+        (output, yaml) = await ExecuteAsync("servers", "add", "c6400");
+        Assert.Equal("Server 'c6400' added.\n", output);
+
         (output, yaml) = await ExecuteAsync("systems", "add", "vm01");
         Assert.Equal("System 'vm01' added.\n", output);
         (output, yaml) = await ExecuteAsync("systems", "set", "vm01", "--runs-on", "c6400");
 
-        (output, yaml) = await ExecuteAsync("servers", "add", "c6400");
-        Assert.Equal("Server 'c6400' added.\n", output);
 
         // Update system
         (output, yaml) = await ExecuteAsync("services", "set", "immich", "--ip", "192.168.10.14", "--port", "80",

+ 21 - 2
Tests/EndToEnd/SystemYamlE2ETests.cs

@@ -28,11 +28,20 @@ public class SystemYamlE2ETests(TempYamlCliFixture fs, ITestOutputHelper outputH
     {
         await File.WriteAllTextAsync(Path.Combine(fs.Root, "config.yaml"), "");
 
-        // Add system
-        var (output, yaml) = await ExecuteAsync("systems", "add", "host01");
+        var (output, yaml) = await ExecuteAsync("servers", "add", "hypervisor01");
+        (output, yaml) = await ExecuteAsync("systems", "add", "host01");
         Assert.Equal("System 'host01' added.\n", output);
         Assert.Equal("""
                      resources:
+                     - kind: Server
+                       cpus: 
+                       ram: 
+                       drives: 
+                       nics: 
+                       gpus: 
+                       ipmi: 
+                       name: hypervisor01
+                       tags: 
                      - kind: System
                        type: 
                        os: 
@@ -56,8 +65,18 @@ public class SystemYamlE2ETests(TempYamlCliFixture fs, ITestOutputHelper outputH
         );
 
         Assert.Equal("System 'host01' updated.\n", output);
+
         Assert.Equal("""
                      resources:
+                     - kind: Server
+                       cpus: 
+                       ram: 
+                       drives: 
+                       nics: 
+                       gpus: 
+                       ipmi: 
+                       name: hypervisor01
+                       tags: 
                      - kind: System
                        type: server
                        os: ubuntu-22.04

+ 0 - 1
Tests/HardwareResources/AccessPoints/DeleteAccessPointUseCaseTests.cs

@@ -1,6 +1,5 @@
 using NSubstitute;
 using RackPeek.Domain.Helpers;
-using RackPeek.Domain.Resources.Hardware;
 using RackPeek.Domain.Resources.Hardware.AccessPoints;
 using RackPeek.Domain.Resources.Hardware.Models;
 

+ 6 - 5
Tests/HardwareResources/DeleteServerUseCaseTests.cs

@@ -1,6 +1,5 @@
 using Microsoft.Extensions.DependencyInjection;
 using NSubstitute;
-using NSubstitute.ClearExtensions;
 using RackPeek.Domain.Helpers;
 using RackPeek.Domain.Resources.Hardware;
 using RackPeek.Domain.Resources.Hardware.Models;
@@ -12,11 +11,8 @@ namespace Tests.HardwareResources;
 
 public class UsecaseTestHost
 {
-    public IHardwareRepository HardwareRepo { get; set; }
-    public ISystemRepository SystemRepo { get; set; }
-    public IServiceRepository ServiceRepo { get; set; }
-
     private readonly ServiceCollection _sc;
+
     public UsecaseTestHost()
     {
         HardwareRepo = Substitute.For<IHardwareRepository>();
@@ -27,6 +23,11 @@ public class UsecaseTestHost
         _sc.AddSingleton<ISystemRepository>(SystemRepo);
         _sc.AddSingleton<IServiceRepository>(ServiceRepo);
     }
+
+    public IHardwareRepository HardwareRepo { get; set; }
+    public ISystemRepository SystemRepo { get; set; }
+    public IServiceRepository ServiceRepo { get; set; }
+
     public T Get<T>() where T : notnull
     {
         _sc.AddSingleton(typeof(T));

+ 0 - 1
Tests/HardwareResources/Desktops/DeleteDesktopUseCaseTests.cs

@@ -1,6 +1,5 @@
 using NSubstitute;
 using RackPeek.Domain.Helpers;
-using RackPeek.Domain.Resources.Hardware;
 using RackPeek.Domain.Resources.Hardware.Desktops;
 using RackPeek.Domain.Resources.Hardware.Models;
 

+ 0 - 1
Tests/HardwareResources/Switches/DeleteSwitchUseCaseTests.cs

@@ -1,6 +1,5 @@
 using NSubstitute;
 using RackPeek.Domain.Helpers;
-using RackPeek.Domain.Resources.Hardware;
 using RackPeek.Domain.Resources.Hardware.Models;
 using RackPeek.Domain.Resources.Hardware.Switches;
 

+ 0 - 1
Tests/HardwareResources/Ups/DeleteUpsUseCaseTests.cs

@@ -1,6 +1,5 @@
 using NSubstitute;
 using RackPeek.Domain.Helpers;
-using RackPeek.Domain.Resources.Hardware;
 using RackPeek.Domain.Resources.Hardware.Models;
 using RackPeek.Domain.Resources.Hardware.UpsUnits;
 

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor