4
0

YamlServiceRepository.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using RackPeek.Domain.Resources.Services;
  2. namespace RackPeek.Domain.Persistence;
  3. public class YamlServiceRepository(IResourceCollection resources) : IServiceRepository
  4. {
  5. public Task<int> GetCountAsync()
  6. {
  7. return Task.FromResult(resources.ServiceResources.Count);
  8. }
  9. public Task<int> GetIpAddressCountAsync()
  10. {
  11. return Task.FromResult(resources.ServiceResources
  12. .Where(i => i.Network?.Ip != null)
  13. .Select(i => i.Network!.Ip)
  14. .Distinct()
  15. .Count());
  16. }
  17. public Task<IReadOnlyList<Service>> GetAllAsync()
  18. {
  19. return Task.FromResult(resources.ServiceResources);
  20. }
  21. public Task<Service?> GetByNameAsync(string name)
  22. {
  23. return Task.FromResult(resources.GetByName(name) as Service);
  24. }
  25. public Task<IReadOnlyList<Service>> GetBySystemHostAsync(string systemHostName)
  26. {
  27. var systemHostNameLower = systemHostName.ToLower().Trim();
  28. var results = resources.ServiceResources
  29. .Where(s => s.RunsOn != null && s.RunsOn.ToLower().Equals(systemHostNameLower)).ToList();
  30. return Task.FromResult<IReadOnlyList<Service>>(results);
  31. }
  32. public async Task AddAsync(Service service)
  33. {
  34. if (resources.ServiceResources.Any(r =>
  35. r.Name.Equals(service.Name, StringComparison.OrdinalIgnoreCase)))
  36. throw new InvalidOperationException(
  37. $"Service with name '{service.Name}' already exists.");
  38. await resources.AddAsync(service);
  39. }
  40. public async Task UpdateAsync(Service service)
  41. {
  42. var existing = resources.ServiceResources
  43. .FirstOrDefault(r => r.Name.Equals(service.Name, StringComparison.OrdinalIgnoreCase));
  44. if (existing == null)
  45. throw new InvalidOperationException($"Service '{service.Name}' not found.");
  46. await resources.UpdateAsync(service);
  47. }
  48. public async Task DeleteAsync(string name)
  49. {
  50. var existing = resources.ServiceResources
  51. .FirstOrDefault(r => r.Name.Equals(name, StringComparison.OrdinalIgnoreCase));
  52. if (existing == null)
  53. throw new InvalidOperationException($"Service '{name}' not found.");
  54. await resources.DeleteAsync(name);
  55. }
  56. }