Browse Source

UseCases added

James 2 months ago
parent
commit
ac198f630b

+ 27 - 0
RackPeek.Domain/Resources/Hardware/Server/Drives/AddDrivesUseCase.cs

@@ -0,0 +1,27 @@
+namespace RackPeek.Domain.Resources.Hardware.Server.Drives;
+
+public class AddDrivesUseCase(IHardwareRepository repository)
+{
+    public async Task ExecuteAsync(
+        string serverName,
+        string type,
+        int size)
+    {
+        var hardware = await repository.GetByNameAsync(serverName);
+
+        if (hardware is not Models.Server server)
+        {
+            return;
+        }
+
+        server.Drives ??= [];
+
+        server.Drives.Add(new Models.Drive
+        {
+            Type = type,
+            Size = size
+        });
+        
+        await repository.UpdateAsync(server);
+    }
+}

+ 15 - 0
RackPeek.Domain/Resources/Hardware/Server/Drives/RemoveDrivesUseCase.cs

@@ -0,0 +1,15 @@
+namespace RackPeek.Domain.Resources.Hardware.Server.Drives;
+
+public class RemoveDriveUseCase(IHardwareRepository repository)
+{
+    public async Task ExecuteAsync(string serverName, int index)
+    {
+        var hardware = await repository.GetByNameAsync(serverName);
+        if (hardware is not Models.Server server) return;
+        server.Drives ??= [];
+        if (index < 0 || index >= server.Drives.Count)
+            throw new ArgumentOutOfRangeException(nameof(index), "Drive index out of range.");
+        server.Drives.RemoveAt(index);
+        await repository.UpdateAsync(server);
+    }
+}

+ 21 - 0
RackPeek.Domain/Resources/Hardware/Server/Drives/UpdateDrivesUseCase.cs

@@ -0,0 +1,21 @@
+namespace RackPeek.Domain.Resources.Hardware.Server.Drives;
+
+public class UpdateDriveUseCase(IHardwareRepository repository)
+{
+    public async Task ExecuteAsync(string serverName, int index, string type, int size)
+    {
+        var hardware = await repository.GetByNameAsync(serverName);
+        if (hardware is not Models.Server server)
+        {
+            return;
+        }
+
+        server.Drives ??= [];
+        if (index < 0 || index >= server.Drives.Count)
+            throw new ArgumentOutOfRangeException(nameof(index), "Drive index out of range.");
+        var drive = server.Drives[index];
+        drive.Type = type;
+        drive.Size = size;
+        await repository.UpdateAsync(server);
+    }
+}