SystemReportUseCase.cs 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using RackPeek.Domain.Persistence;
  2. namespace RackPeek.Domain.Resources.SystemResources.UseCases;
  3. public record SystemReport(
  4. IReadOnlyList<SystemReportRow> Systems
  5. );
  6. public record SystemReportRow(
  7. string Name,
  8. string? Type,
  9. string? Os,
  10. int Cores,
  11. double RamGb,
  12. int TotalStorageGb,
  13. List<string> RunsOn
  14. );
  15. public class SystemReportUseCase(IResourceCollection repository) : IUseCase {
  16. public async Task<SystemReport> ExecuteAsync() {
  17. IReadOnlyList<SystemResource> systems = await repository.GetAllOfTypeAsync<SystemResource>();
  18. var rows = systems.Select(system => {
  19. var totalStorage = system.Drives?.Sum(d => d.Size) ?? 0;
  20. return new SystemReportRow(
  21. system.Name,
  22. system.Type,
  23. system.Os,
  24. system.Cores ?? 0,
  25. system.Ram ?? 0,
  26. totalStorage,
  27. system.RunsOn
  28. );
  29. }).ToList();
  30. return new SystemReport(rows);
  31. }
  32. }