Browse Source

Added rename usecases

Tim Jones 2 months ago
parent
commit
25012396b6

+ 37 - 0
RackPeek.Domain/Resources/Hardware/AccessPoints/RenameAccessPointUseCase.cs

@@ -0,0 +1,37 @@
+using RackPeek.Domain.Helpers;
+using RackPeek.Domain.Resources.Models;
+using RackPeek.Domain.Resources.SystemResources;
+
+namespace RackPeek.Domain.Resources.Hardware.AccessPoints;
+
+public class RenameAccessPointUseCase(IHardwareRepository repository, ISystemRepository systemRepo, IResourceRepository resourceRepo) : IUseCase
+{
+    public async Task ExecuteAsync(string originalName, string newName)
+    {
+        originalName = Normalize.SystemName(originalName);
+        ThrowIfInvalid.ResourceName(originalName);
+        
+        newName = Normalize.SystemName(newName);
+        ThrowIfInvalid.ResourceName(newName);
+
+        var existingResourceKind = await resourceRepo.GetResourceKindAsync(newName);
+        if (!string.IsNullOrEmpty(existingResourceKind))
+            throw new ConflictException($"{existingResourceKind} resource '{newName}' already exists.");
+        
+        var original = await repository.GetByNameAsync(originalName) as AccessPoint;
+        if (original == null)
+        {
+            throw new NotFoundException($"Resource '{originalName}' not found.");
+        }
+
+        original.Name = newName;
+        await repository.UpdateAsync(original);
+        
+        var children = await systemRepo.GetByPhysicalHostAsync(originalName);
+        foreach (var child in children)
+        {
+            child.RunsOn = newName;
+            await systemRepo.UpdateAsync(child);
+        }
+    }
+}

+ 37 - 0
RackPeek.Domain/Resources/Hardware/Desktops/RenameDesktopUseCase.cs

@@ -0,0 +1,37 @@
+using RackPeek.Domain.Helpers;
+using RackPeek.Domain.Resources.Models;
+using RackPeek.Domain.Resources.SystemResources;
+
+namespace RackPeek.Domain.Resources.Hardware.Desktops;
+
+public class RenameDesktopUseCase(IHardwareRepository repository, ISystemRepository systemRepo, IResourceRepository resourceRepo) : IUseCase
+{
+    public async Task ExecuteAsync(string originalName, string newName)
+    {
+        originalName = Normalize.SystemName(originalName);
+        ThrowIfInvalid.ResourceName(originalName);
+        
+        newName = Normalize.SystemName(newName);
+        ThrowIfInvalid.ResourceName(newName);
+
+        var existingResourceKind = await resourceRepo.GetResourceKindAsync(newName);
+        if (!string.IsNullOrEmpty(existingResourceKind))
+            throw new ConflictException($"{existingResourceKind} resource '{newName}' already exists.");
+        
+        var original = await repository.GetByNameAsync(originalName) as Desktop;
+        if (original == null)
+        {
+            throw new NotFoundException($"Resource '{originalName}' not found.");
+        }
+
+        original.Name = newName;
+        await repository.UpdateAsync(original);
+        
+        var children = await systemRepo.GetByPhysicalHostAsync(originalName);
+        foreach (var child in children)
+        {
+            child.RunsOn = newName;
+            await systemRepo.UpdateAsync(child);
+        }
+    }
+}

+ 37 - 0
RackPeek.Domain/Resources/Hardware/Firewalls/RenameFirewallUseCase.cs

@@ -0,0 +1,37 @@
+using RackPeek.Domain.Helpers;
+using RackPeek.Domain.Resources.Models;
+using RackPeek.Domain.Resources.SystemResources;
+
+namespace RackPeek.Domain.Resources.Hardware.Firewalls;
+
+public class RenameFirewallUseCase(IHardwareRepository repository, ISystemRepository systemRepo, IResourceRepository resourceRepo) : IUseCase
+{
+    public async Task ExecuteAsync(string originalName, string newName)
+    {
+        originalName = Normalize.SystemName(originalName);
+        ThrowIfInvalid.ResourceName(originalName);
+        
+        newName = Normalize.SystemName(newName);
+        ThrowIfInvalid.ResourceName(newName);
+
+        var existingResourceKind = await resourceRepo.GetResourceKindAsync(newName);
+        if (!string.IsNullOrEmpty(existingResourceKind))
+            throw new ConflictException($"{existingResourceKind} resource '{newName}' already exists.");
+        
+        var original = await repository.GetByNameAsync(originalName) as Firewall;
+        if (original == null)
+        {
+            throw new NotFoundException($"Resource '{originalName}' not found.");
+        }
+
+        original.Name = newName;
+        await repository.UpdateAsync(original);
+        
+        var children = await systemRepo.GetByPhysicalHostAsync(originalName);
+        foreach (var child in children)
+        {
+            child.RunsOn = newName;
+            await systemRepo.UpdateAsync(child);
+        }
+    }
+}

+ 37 - 0
RackPeek.Domain/Resources/Hardware/Laptops/RenameLaptopUseCase.cs

@@ -0,0 +1,37 @@
+using RackPeek.Domain.Helpers;
+using RackPeek.Domain.Resources.Models;
+using RackPeek.Domain.Resources.SystemResources;
+
+namespace RackPeek.Domain.Resources.Hardware.Laptops;
+
+public class RenameLaptopUseCase(IHardwareRepository repository, ISystemRepository systemRepo, IResourceRepository resourceRepo) : IUseCase
+{
+    public async Task ExecuteAsync(string originalName, string newName)
+    {
+        originalName = Normalize.SystemName(originalName);
+        ThrowIfInvalid.ResourceName(originalName);
+        
+        newName = Normalize.SystemName(newName);
+        ThrowIfInvalid.ResourceName(newName);
+
+        var existingResourceKind = await resourceRepo.GetResourceKindAsync(newName);
+        if (!string.IsNullOrEmpty(existingResourceKind))
+            throw new ConflictException($"{existingResourceKind} resource '{newName}' already exists.");
+        
+        var original = await repository.GetByNameAsync(originalName) as Laptop;
+        if (original == null)
+        {
+            throw new NotFoundException($"Resource '{originalName}' not found.");
+        }
+
+        original.Name = newName;
+        await repository.UpdateAsync(original);
+        
+        var children = await systemRepo.GetByPhysicalHostAsync(originalName);
+        foreach (var child in children)
+        {
+            child.RunsOn = newName;
+            await systemRepo.UpdateAsync(child);
+        }
+    }
+}

+ 37 - 0
RackPeek.Domain/Resources/Hardware/Routers/RenameRouterUseCase.cs

@@ -0,0 +1,37 @@
+using RackPeek.Domain.Helpers;
+using RackPeek.Domain.Resources.Models;
+using RackPeek.Domain.Resources.SystemResources;
+
+namespace RackPeek.Domain.Resources.Hardware.Routers;
+
+public class RenameRouterUseCase(IHardwareRepository repository, ISystemRepository systemRepo, IResourceRepository resourceRepo) : IUseCase
+{
+    public async Task ExecuteAsync(string originalName, string newName)
+    {
+        originalName = Normalize.SystemName(originalName);
+        ThrowIfInvalid.ResourceName(originalName);
+        
+        newName = Normalize.SystemName(newName);
+        ThrowIfInvalid.ResourceName(newName);
+
+        var existingResourceKind = await resourceRepo.GetResourceKindAsync(newName);
+        if (!string.IsNullOrEmpty(existingResourceKind))
+            throw new ConflictException($"{existingResourceKind} resource '{newName}' already exists.");
+        
+        var original = await repository.GetByNameAsync(originalName) as Router;
+        if (original == null)
+        {
+            throw new NotFoundException($"Resource '{originalName}' not found.");
+        }
+
+        original.Name = newName;
+        await repository.UpdateAsync(original);
+        
+        var children = await systemRepo.GetByPhysicalHostAsync(originalName);
+        foreach (var child in children)
+        {
+            child.RunsOn = newName;
+            await systemRepo.UpdateAsync(child);
+        }
+    }
+}

+ 37 - 0
RackPeek.Domain/Resources/Hardware/Servers/RenameSystemUseCase.cs

@@ -0,0 +1,37 @@
+using RackPeek.Domain.Helpers;
+using RackPeek.Domain.Resources.Models;
+using RackPeek.Domain.Resources.SystemResources;
+
+namespace RackPeek.Domain.Resources.Hardware.Servers;
+
+public class RenameServerUseCase(IHardwareRepository repository, ISystemRepository systemRepo, IResourceRepository resourceRepo) : IUseCase
+{
+    public async Task ExecuteAsync(string originalName, string newName)
+    {
+        originalName = Normalize.SystemName(originalName);
+        ThrowIfInvalid.ResourceName(originalName);
+        
+        newName = Normalize.SystemName(newName);
+        ThrowIfInvalid.ResourceName(newName);
+
+        var existingResourceKind = await resourceRepo.GetResourceKindAsync(newName);
+        if (!string.IsNullOrEmpty(existingResourceKind))
+            throw new ConflictException($"{existingResourceKind} resource '{newName}' already exists.");
+        
+        var original = await repository.GetByNameAsync(originalName) as Server;
+        if (original == null)
+        {
+            throw new NotFoundException($"Resource '{originalName}' not found.");
+        }
+
+        original.Name = newName;
+        await repository.UpdateAsync(original);
+        
+        var children = await systemRepo.GetByPhysicalHostAsync(originalName);
+        foreach (var child in children)
+        {
+            child.RunsOn = newName;
+            await systemRepo.UpdateAsync(child);
+        }
+    }
+}

+ 37 - 0
RackPeek.Domain/Resources/Hardware/Switches/RenameSwitchUseCase.cs

@@ -0,0 +1,37 @@
+using RackPeek.Domain.Helpers;
+using RackPeek.Domain.Resources.Models;
+using RackPeek.Domain.Resources.SystemResources;
+
+namespace RackPeek.Domain.Resources.Hardware.Switches;
+
+public class RenameSwitchUseCase(IHardwareRepository repository, ISystemRepository systemRepo, IResourceRepository resourceRepo) : IUseCase
+{
+    public async Task ExecuteAsync(string originalName, string newName)
+    {
+        originalName = Normalize.SystemName(originalName);
+        ThrowIfInvalid.ResourceName(originalName);
+        
+        newName = Normalize.SystemName(newName);
+        ThrowIfInvalid.ResourceName(newName);
+
+        var existingResourceKind = await resourceRepo.GetResourceKindAsync(newName);
+        if (!string.IsNullOrEmpty(existingResourceKind))
+            throw new ConflictException($"{existingResourceKind} resource '{newName}' already exists.");
+        
+        var original = await repository.GetByNameAsync(originalName) as Switch;
+        if (original == null)
+        {
+            throw new NotFoundException($"Resource '{originalName}' not found.");
+        }
+
+        original.Name = newName;
+        await repository.UpdateAsync(original);
+        
+        var children = await systemRepo.GetByPhysicalHostAsync(originalName);
+        foreach (var child in children)
+        {
+            child.RunsOn = newName;
+            await systemRepo.UpdateAsync(child);
+        }
+    }
+}

+ 37 - 0
RackPeek.Domain/Resources/Hardware/UpsUnits/RenameUpsUseCase.cs

@@ -0,0 +1,37 @@
+using RackPeek.Domain.Helpers;
+using RackPeek.Domain.Resources.Models;
+using RackPeek.Domain.Resources.SystemResources;
+
+namespace RackPeek.Domain.Resources.Hardware.UpsUnits;
+
+public class RenameUpsUseCase(IHardwareRepository repository, ISystemRepository systemRepo, IResourceRepository resourceRepo) : IUseCase
+{
+    public async Task ExecuteAsync(string originalName, string newName)
+    {
+        originalName = Normalize.SystemName(originalName);
+        ThrowIfInvalid.ResourceName(originalName);
+        
+        newName = Normalize.SystemName(newName);
+        ThrowIfInvalid.ResourceName(newName);
+
+        var existingResourceKind = await resourceRepo.GetResourceKindAsync(newName);
+        if (!string.IsNullOrEmpty(existingResourceKind))
+            throw new ConflictException($"{existingResourceKind} resource '{newName}' already exists.");
+        
+        var original = await repository.GetByNameAsync(originalName) as Ups;
+        if (original == null)
+        {
+            throw new NotFoundException($"Resource '{originalName}' not found.");
+        }
+
+        original.Name = newName;
+        await repository.UpdateAsync(original);
+        
+        var children = await systemRepo.GetByPhysicalHostAsync(originalName);
+        foreach (var child in children)
+        {
+            child.RunsOn = newName;
+            await systemRepo.UpdateAsync(child);
+        }
+    }
+}

+ 29 - 0
RackPeek.Domain/Resources/Services/RenameSystemUseCase.cs

@@ -0,0 +1,29 @@
+using RackPeek.Domain.Helpers;
+
+namespace RackPeek.Domain.Resources.Services;
+
+public class RenameServiceUseCase(IServiceRepository repository, IResourceRepository resourceRepo) : IUseCase
+{
+    public async Task ExecuteAsync(string originalName, string newName)
+    {
+        originalName = Normalize.ServiceName(originalName);
+        ThrowIfInvalid.ResourceName(originalName);
+        
+        newName = Normalize.ServiceName(newName);
+        ThrowIfInvalid.ResourceName(newName);
+
+        var existingResourceKind = await resourceRepo.GetResourceKindAsync(newName);
+        if (!string.IsNullOrEmpty(existingResourceKind))
+            throw new ConflictException($"{existingResourceKind} resource '{newName}' already exists.");
+        
+        var original = await repository.GetByNameAsync(originalName);
+        if (original == null)
+        {
+            throw new NotFoundException($"Resource '{originalName}' not found.");
+        }
+        
+        original.Name = newName;
+        
+        await repository.UpdateAsync(original);
+    }
+}

+ 37 - 0
RackPeek.Domain/Resources/SystemResources/UseCases/RenameSystemUseCase.cs

@@ -0,0 +1,37 @@
+using RackPeek.Domain.Helpers;
+using RackPeek.Domain.Resources.Models;
+using RackPeek.Domain.Resources.Services;
+
+namespace RackPeek.Domain.Resources.SystemResources.UseCases;
+
+public class RenameSystemUseCase(ISystemRepository repository, IServiceRepository serviceRepo, IResourceRepository resourceRepo) : IUseCase
+{
+    public async Task ExecuteAsync(string originalName, string newName)
+    {
+        originalName = Normalize.SystemName(originalName);
+        ThrowIfInvalid.ResourceName(originalName);
+        
+        newName = Normalize.SystemName(newName);
+        ThrowIfInvalid.ResourceName(newName);
+
+        var existingResourceKind = await resourceRepo.GetResourceKindAsync(newName);
+        if (!string.IsNullOrEmpty(existingResourceKind))
+            throw new ConflictException($"{existingResourceKind} resource '{newName}' already exists.");
+        
+        var original = await repository.GetByNameAsync(originalName);
+        if (original == null)
+        {
+            throw new NotFoundException($"Resource '{originalName}' not found.");
+        }
+
+        original.Name = newName;
+        await repository.UpdateAsync(original);
+        
+        var children = await serviceRepo.GetBySystemHostAsync(originalName);
+        foreach (var child in children)
+        {
+            child.RunsOn = newName;
+            await serviceRepo.UpdateAsync(child);
+        }
+    }
+}