public async Task <IResult <IMessageOutput> > Handle(TreatmentSessionInput input, CancellationToken cancellationToken)
        {
            var validationResult = Validator.Validate(input);

            if (validationResult.Errors.Count > 0)
            {
                return(new Result <IMessageOutput>(validationResult.Errors));
            }

            var patient = await PatientRepository.SingleOrDefaultAsync(p => p.ReferenceId == input.PatientReferenceId, cancellationToken);

            var dentalTeam = await DentalTeamRepository.SingleOrDefaultAsync(dt => dt.ReferenceId == input.DentalTeamReferenceId, cancellationToken);

            var treatment = await TreatmentRepository.SingleOrDefaultAsync(t => t.ReferenceId == input.TreatmentReferenceId, cancellationToken);

            var treatmentSession = new TreatmentSession()
            {
                PatientId    = patient.Id,
                DentalTeamId = dentalTeam.Id,
                TreatmentId  = treatment.Id,
                Start        = input.Start.Value,
                End          = input.End.Value
            };

            await TreatmentSessionRepository.AddAsync(treatmentSession, cancellationToken);

            await UoW.SaveAsync(cancellationToken);

            return(new Result <IMessageOutput>(
                       value: new MessageOutput("Treatment Session successfully created."),
                       type: ResultType.Created
                       ));
        }
        private TreatmentSession CreateTreatmentSession(
            Guid patientId,
            Guid dentalTeamId,
            Guid treatmentId,
            DateTimeOffset start,
            DateTimeOffset end,
            TreatmentSessionStatus status)
        {
            var treatmentSession = new TreatmentSession
            {
                PatientId    = patientId,
                DentalTeamId = dentalTeamId,
                TreatmentId  = treatmentId,
                Start        = start,
                End          = end,
                Status       = status
            };

            ServiceProvider.GetRequiredService <IWriteRepository <TreatmentSession> >()
            .AddAsync(treatmentSession, default)
            .GetAwaiter()
            .GetResult();

            ServiceProvider.GetRequiredService <IUnitOfWork>().Save();

            return(ServiceProvider.GetRequiredService <IReadRepository <TreatmentSession> >()
                   .AsNoTracking()
                   .Include(ts => ts.Patient)
                   .Include(ts => ts.DentalTeam)
                   .Include(ts => ts.Treatment)
                   .FirstOrDefault());
        }