YamlServerRepository.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using RackPeek.Domain.Resources.Hardware;
  2. using RackPeek.Domain.Resources.Models;
  3. using RackPeek.Domain.Resources.Services;
  4. namespace RackPeek.Domain.Persistence;
  5. public class YamlHardwareRepo<T>(IResourceCollection resources) : IResourceRepo<T> where T : Hardware
  6. {
  7. public Task<IReadOnlyList<T>> GetAllAsync()
  8. {
  9. var servers = resources.HardwareResources.OfType<T>().ToList();
  10. return Task.FromResult<IReadOnlyList<T>>(servers.AsReadOnly());
  11. }
  12. public async Task AddAsync(T service)
  13. {
  14. if (await resources.Exists(service.Name))
  15. throw new InvalidOperationException(
  16. $"Resource with name '{service.Name}' already exists.");
  17. await resources.AddAsync(service);
  18. }
  19. public async Task UpdateAsync(T service)
  20. {
  21. var existing = resources.HardwareResources
  22. .FirstOrDefault(r => r.Name.Equals(service.Name, StringComparison.OrdinalIgnoreCase));
  23. if (existing is not T)
  24. throw new InvalidOperationException($"'{service.Name}' not found.");
  25. await resources.UpdateAsync(service);
  26. }
  27. public async Task DeleteAsync(string name)
  28. {
  29. var existing = resources.HardwareResources
  30. .FirstOrDefault(r => r.Name.Equals(name, StringComparison.OrdinalIgnoreCase));
  31. if (existing is not Server)
  32. throw new InvalidOperationException($"'{name}' not found.");
  33. await resources.DeleteAsync(name);
  34. }
  35. public Task<T?> GetByNameAsync(string name)
  36. {
  37. return Task.FromResult(resources.GetByName(name) as T);
  38. }
  39. }