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(); }