Browse Source

UseCases Added

James 2 months ago
parent
commit
5bff0ea797

+ 0 - 1
RackPeek.Domain/RackPeek.Domain.csproj

@@ -7,7 +7,6 @@
     </PropertyGroup>
 
     <ItemGroup>
-      <Folder Include="Resources\Hardware\AccessPoint\" />
       <Folder Include="Resources\Hardware\Desktop\" />
       <Folder Include="Resources\Hardware\Ups\" />
     </ItemGroup>

+ 20 - 0
RackPeek.Domain/Resources/Hardware/AccessPoints/AddAccessPointUseCase.cs

@@ -0,0 +1,20 @@
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.AccessPoints;
+
+public class AddAccessPointUseCase(IHardwareRepository repository)
+{
+    public async Task ExecuteAsync(string name)
+    {
+        var existing = await repository.GetByNameAsync(name);
+        if (existing != null)
+            throw new InvalidOperationException($"Access point '{name}' already exists.");
+
+        var ap = new AccessPoint
+        {
+            Name = name
+        };
+
+        await repository.AddAsync(ap);
+    }
+}

+ 14 - 0
RackPeek.Domain/Resources/Hardware/AccessPoints/DeleteAccessPointUseCase.cs

@@ -0,0 +1,14 @@
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.AccessPoints;
+
+public class DeleteAccessPointUseCase(IHardwareRepository repository)
+{
+    public async Task ExecuteAsync(string name)
+    {
+        if (await repository.GetByNameAsync(name) is not AccessPoint ap)
+            throw new InvalidOperationException($"Access point '{name}' not found.");
+
+        await repository.DeleteAsync(name);
+    }
+}

+ 25 - 0
RackPeek.Domain/Resources/Hardware/AccessPoints/DescribeAccessPointUseCase.cs

@@ -0,0 +1,25 @@
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.AccessPoints;
+
+public record AccessPointDescription(
+    string Name,
+    string? Model,
+    double? Speed
+);
+
+public class DescribeAccessPointUseCase(IHardwareRepository repository)
+{
+    public async Task<AccessPointDescription?> ExecuteAsync(string name)
+    {
+        var ap = await repository.GetByNameAsync(name) as AccessPoint;
+        if (ap == null)
+            return null;
+
+        return new AccessPointDescription(
+            ap.Name,
+            ap.Model,
+            ap.Speed
+        );
+    }
+}

+ 12 - 0
RackPeek.Domain/Resources/Hardware/AccessPoints/GetAccessPointUseCase.cs

@@ -0,0 +1,12 @@
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.AccessPoints;
+
+public class GetAccessPointUseCase(IHardwareRepository repository)
+{
+    public async Task<AccessPoint?> ExecuteAsync(string name)
+    {
+        var hardware = await repository.GetByNameAsync(name);
+        return hardware as AccessPoint;
+    }
+}

+ 12 - 0
RackPeek.Domain/Resources/Hardware/AccessPoints/GetAccessPointsUseCase.cs

@@ -0,0 +1,12 @@
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.AccessPoints;
+
+public class GetAccessPointsUseCase(IHardwareRepository repository)
+{
+    public async Task<IReadOnlyList<AccessPoint>> ExecuteAsync()
+    {
+        var hardware = await repository.GetAllAsync();
+        return hardware.OfType<AccessPoint>().ToList();
+    }
+}

+ 25 - 0
RackPeek.Domain/Resources/Hardware/AccessPoints/UpdateAccessPointUseCase.cs

@@ -0,0 +1,25 @@
+using RackPeek.Domain.Resources.Hardware.Models;
+
+namespace RackPeek.Domain.Resources.Hardware.AccessPoints;
+
+public class UpdateAccessPointUseCase(IHardwareRepository repository)
+{
+    public async Task ExecuteAsync(
+        string name,
+        string? model = null,
+        double? speed = null
+    )
+    {
+        var ap = await repository.GetByNameAsync(name) as AccessPoint;
+        if (ap == null)
+            throw new InvalidOperationException($"Access point '{name}' not found.");
+
+        if (!string.IsNullOrWhiteSpace(model))
+            ap.Model = model;
+
+        if (speed.HasValue)
+            ap.Speed = speed.Value;
+
+        await repository.UpdateAsync(ap);
+    }
+}