< Summary

Information
Class: LifeChart.Application.UseCases.Pdf.ExportPdfUseCase
Assembly: LifeChart.Application
File(s): /home/runner/work/lifechart/lifechart/src/LifeChart.Application/UseCases/Pdf/ExportPdfUseCase.cs
Tag: 113_29159449707
Line coverage
0%
Covered lines: 0
Uncovered lines: 34
Coverable lines: 34
Total lines: 55
Line coverage: 0%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
ExecuteAsync()100%210%

File(s)

/home/runner/work/lifechart/lifechart/src/LifeChart.Application/UseCases/Pdf/ExportPdfUseCase.cs

#LineLine coverage
 1using LifeChart.Application.DTOs;
 2using LifeChart.Application.Interfaces;
 3using LifeChart.Domain.Entries;
 4using LifeChart.Domain.Medications;
 5
 6namespace LifeChart.Application.UseCases.Pdf;
 7
 8public class ExportPdfUseCase
 9{
 10    private readonly IDailyEntryRepository _entryRepository;
 11    private readonly IMedicationRepository _medicationRepository;
 12    private readonly IPdfRenderer _renderer;
 13
 014    public ExportPdfUseCase(
 015        IDailyEntryRepository entryRepository,
 016        IMedicationRepository medicationRepository,
 017        IPdfRenderer renderer)
 18    {
 019        _entryRepository = entryRepository;
 020        _medicationRepository = medicationRepository;
 021        _renderer = renderer;
 022    }
 23
 24    public async Task<byte[]> ExecuteAsync(DateOnly from, DateOnly to)
 25    {
 026        var entries = (await _entryRepository.GetRangeAsync(from, to))
 027            .Select(e => new DailyEntryDto(
 028                e.Date, e.Mood.Value, e.Functionality.Value,
 029                e.SleepHours.Value, e.MedicationTaken,
 030                e.MenstrualCycle, e.Symptoms, e.Notes, e.IsHypomanic))
 031            .ToList()
 032            .AsReadOnly();
 33
 034        var medications = (await _medicationRepository.GetAllActiveAsync())
 035            .Select(m => new MedicationDto(
 036                m.Id, m.Name, m.Dosage,
 037                m.MinStock, m.CurrentStock, m.IsStockLow,
 038                m.IntakeTimes
 039                    .Select(i => new IntakeTimeDto(i.Time.ToString("HH:mm"), i.DoseCount))
 040                    .ToList()
 041                    .AsReadOnly()))
 042            .ToList()
 043            .AsReadOnly();
 44
 045        var chartData = new ChartDataDto(
 046            entries
 047                .Select(e => new ChartPointDto(e.Date, e.Mood, e.Functionality, e.IsHypomanic))
 048                .ToList()
 049                .AsReadOnly(),
 050            from, to);
 51
 052        return await _renderer.RenderAsync(
 053            new PdfReportData(chartData, entries, medications, from, to));
 054    }
 55}