Example #1
0
        public async Task <Result <GetEnrollmentDetails.Details, Error> > Handle(GetEnrollmentDetails.QueryByEnrollmentId request, CancellationToken cancellationToken)
        {
            var id = EnrollmentAggregate.EnrollmentId.With(request.EnrollmentID);

            var events = await _eventStore.LoadEventsAsync <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId>(id, cancellationToken);

            var enrollment = await _aggregateStore.LoadAsync <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId>(id, cancellationToken);

            if (enrollment.IsNew)
            {
                return(Result.Failure <GetEnrollmentDetails.Details, Error>(new Error.ResourceNotFound()));
            }

            var preferredTrainings = await _trainingRepository.GetByIds(enrollment.PreferredTrainingIds);

            var trainers = await _trainerProvider.GetTrainerDetails(preferredTrainings.Select(x => x.CoordinatorID).ToArray());

            var latestCampaign = (await _campaignRepository.GetAll())
                                 .OrderByDescending(x => x.StartDateTime, OffsetDateTime.Comparer.Instant)
                                 .FirstOrDefault();
            var now = _clock.GetCurrentInstant();

            var details = await BuildDetails(enrollment, events, preferredTrainings, trainers, now, latestCampaign);

            return(Result.Success <GetEnrollmentDetails.Details, Error>(details));
        }
        private async Task <IActionResult> BuildPage(Guid enrollmentId)
        {
            EnrollmentId = enrollmentId;
            var request = new GetEnrollmentDetails.QueryByEnrollmentId()
            {
                EnrollmentID = enrollmentId
            };
            var result = await _engine.Query(request);

            if (result.IsFailure)
            {
                return new PageResult()
                       {
                           StatusCode = (int)System.Net.HttpStatusCode.NotFound
                       }
            }
            ;

            EnrollmentDetails = result.Value;
            return(Page());
        }