< Summary

Information
Class: LifeChart.Application.UseCases.Medications.SaveMedicationUseCase
Assembly: LifeChart.Application
File(s): /home/runner/work/lifechart/lifechart/src/LifeChart.Application/UseCases/Medications/SaveMedicationUseCase.cs
Tag: 113_29159449707
Line coverage
100%
Covered lines: 24
Uncovered lines: 0
Coverable lines: 24
Total lines: 47
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

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

File(s)

/home/runner/work/lifechart/lifechart/src/LifeChart.Application/UseCases/Medications/SaveMedicationUseCase.cs

#LineLine coverage
 1using System.Globalization;
 2using LifeChart.Application.DTOs;
 3using LifeChart.Domain.Medications;
 4
 5namespace LifeChart.Application.UseCases.Medications;
 6
 7public class SaveMedicationUseCase
 8{
 9    private readonly IMedicationRepository _repository;
 10
 411    public SaveMedicationUseCase(IMedicationRepository repository)
 412        => _repository = repository;
 13
 14    public async Task ExecuteAsync(SaveMedicationDto dto)
 15    {
 416        var intakeTimes = dto.IntakeTimes
 517            .Select(i => new IntakeTime(TimeOnly.Parse(i.Time, CultureInfo.CurrentCulture), i.DoseCount))
 418            .ToList();
 19
 420        if (dto.Id == 0)
 21        {
 222            var medication = new Medication(
 223                dto.Name,
 224                dto.Dosage,
 225                dto.MinStock,
 226                dto.CurrentStock,
 227                intakeTimes);
 28
 229            await _repository.SaveAsync(medication);
 30        }
 31        else
 32        {
 233            var existing = await _repository.GetByIdAsync(dto.Id)
 234                ?? throw new InvalidOperationException(
 235                    $"Medikament mit Id {dto.Id} nicht gefunden.");
 36
 137            existing.Update(
 138                dto.Name,
 139                dto.Dosage,
 140                dto.MinStock,
 141                dto.CurrentStock,
 142                intakeTimes);
 43
 144            await _repository.SaveAsync(existing);
 45        }
 346    }
 47}