示例#1
0
        public async Task <IActionResult> UpdateBookingStatus(Guid hearingId, UpdateBookingStatusRequest updateBookingStatusRequest)
        {
            if (hearingId == Guid.Empty)
            {
                ModelState.AddModelError(nameof(hearingId), $"Please provide a valid {nameof(hearingId)}");
                return(BadRequest(ModelState));
            }

            var result = new UpdateBookingStatusRequestValidation().Validate(updateBookingStatusRequest);

            if (!result.IsValid)
            {
                ModelState.AddFluentValidationErrors(result.Errors);
                return(BadRequest(ModelState));
            }

            try
            {
                var bookingStatus = MapUpdateBookingStatus(updateBookingStatusRequest.Status);
                var command       = new UpdateHearingStatusCommand(hearingId, bookingStatus, updateBookingStatusRequest.UpdatedBy,
                                                                   updateBookingStatusRequest.CancelReason);
                await _commandHandler.Handle(command);

                switch (bookingStatus)
                {
                case BookingStatus.Booked:
                    break;

                case BookingStatus.Created:
                    var queriedVideoHearing = await GetHearingToPublish(hearingId);

                    var createVideoHearingEvent = new HearingIsReadyForVideoIntegrationEvent(queriedVideoHearing);
                    await _eventPublisher.PublishAsync(createVideoHearingEvent);

                    break;

                case BookingStatus.Cancelled:
                    await _eventPublisher.PublishAsync(new HearingCancelledIntegrationEvent(hearingId));

                    break;

                default:
                    break;
                }

                return(NoContent());
            }
            catch (HearingNotFoundException)
            {
                return(NotFound());
            }
            catch (DomainRuleException exception)
            {
                exception.ValidationFailures.ForEach(x => ModelState.AddModelError(x.Name, x.Message));
                return(Conflict(ModelState));
            }
        }
 public void OneTimeSetUp()
 {
     _validator = new UpdateBookingStatusRequestValidation();
     request    = new UpdateBookingStatusRequest();
 }