YamlSystemRepository.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using RackPeek.Domain.Resources.SystemResources;
  2. namespace RackPeek.Domain.Persistence;
  3. public class YamlSystemRepository(IResourceCollection resources) : ISystemRepository
  4. {
  5. public Task<int> GetSystemCountAsync()
  6. {
  7. return Task.FromResult(resources.SystemResources.Count);
  8. }
  9. public Task<Dictionary<string, int>> GetSystemTypeCountAsync()
  10. {
  11. return Task.FromResult(resources.SystemResources
  12. .Where(s => !string.IsNullOrEmpty(s.Type))
  13. .GroupBy(h => h.Type!)
  14. .ToDictionary(k => k.Key, v => v.Count()));
  15. }
  16. public Task<Dictionary<string, int>> GetSystemOsCountAsync()
  17. {
  18. return Task.FromResult(resources.SystemResources
  19. .Where(s => !string.IsNullOrEmpty(s.Os))
  20. .GroupBy(h => h.Os!)
  21. .ToDictionary(k => k.Key, v => v.Count()));
  22. }
  23. public Task<IReadOnlyList<SystemResource>> GetAllAsync()
  24. {
  25. return Task.FromResult(resources.SystemResources);
  26. }
  27. public Task<SystemResource?> GetByNameAsync(string name)
  28. {
  29. return Task.FromResult(resources.GetByName(name) as SystemResource);
  30. }
  31. public Task<IReadOnlyList<SystemResource>> GetByPhysicalHostAsync(string physicalHostName)
  32. {
  33. var physicalHostNameLower = physicalHostName.ToLower().Trim();
  34. var results = resources.SystemResources
  35. .Where(s => s.RunsOn != null && s.RunsOn.ToLower().Equals(physicalHostNameLower)).ToList();
  36. return Task.FromResult<IReadOnlyList<SystemResource>>(results);
  37. }
  38. public async Task AddAsync(SystemResource systemResource)
  39. {
  40. if (resources.SystemResources.Any(r =>
  41. r.Name.Equals(systemResource.Name, StringComparison.OrdinalIgnoreCase)))
  42. throw new InvalidOperationException(
  43. $"System with name '{systemResource.Name}' already exists.");
  44. await resources.AddAsync(systemResource);
  45. }
  46. public async Task UpdateAsync(SystemResource systemResource)
  47. {
  48. var existing = resources.SystemResources
  49. .FirstOrDefault(r => r.Name.Equals(systemResource.Name, StringComparison.OrdinalIgnoreCase));
  50. if (existing == null)
  51. throw new InvalidOperationException($"System '{systemResource.Name}' not found.");
  52. await resources.UpdateAsync(systemResource);
  53. }
  54. public async Task DeleteAsync(string name)
  55. {
  56. var existing = resources.SystemResources
  57. .FirstOrDefault(r => r.Name.Equals(name, StringComparison.OrdinalIgnoreCase));
  58. if (existing == null)
  59. throw new InvalidOperationException($"System '{name}' not found.");
  60. await resources.DeleteAsync(name);
  61. }
  62. }