ServiceRepository.cs 2.2 KB

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