SystemReportUseCase.cs 1005 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  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. int RamGb,
  12. int TotalStorageGb,
  13. string? RunsOn
  14. );
  15. public class SystemReportUseCase(IResourceCollection repository) : IUseCase
  16. {
  17. public async Task<SystemReport> ExecuteAsync()
  18. {
  19. var systems = await repository.GetAllOfTypeAsync<SystemResource>();
  20. var rows = systems.Select(system =>
  21. {
  22. var totalStorage = system.Drives?.Sum(d => d.Size) ?? 0;
  23. return new SystemReportRow(
  24. system.Name,
  25. system.Type,
  26. system.Os,
  27. system.Cores ?? 0,
  28. system.Ram ?? 0,
  29. totalStorage,
  30. system.RunsOn
  31. );
  32. }).ToList();
  33. return new SystemReport(rows);
  34. }
  35. }