public async Task <IActionResult> BookNewHearing(BookNewHearingRequest request) { var result = new BookNewHearingRequestValidation().Validate(request); if (!result.IsValid) { ModelState.AddFluentValidationErrors(result.Errors); return(BadRequest(ModelState)); } var query = new GetCaseTypeQuery(request.CaseTypeName); var caseType = await _queryHandler.Handle <GetCaseTypeQuery, CaseType>(query); if (caseType == null) { ModelState.AddModelError(nameof(request.CaseTypeName), "Case type does not exist"); return(BadRequest(ModelState)); } var individualRoles = caseType.CaseRoles.SelectMany(x => x.HearingRoles).Where(x => x.UserRole.IsIndividual).Select(x => x.Name).ToList(); var addressValidationResult = AddressValidationHelper.ValidateAddress(individualRoles, request.Participants); if (!addressValidationResult.IsValid) { ModelState.AddFluentValidationErrors(addressValidationResult.Errors); return(BadRequest(ModelState)); } var hearingType = caseType.HearingTypes.SingleOrDefault(x => x.Name == request.HearingTypeName); if (hearingType == null) { ModelState.AddModelError(nameof(request.HearingTypeName), "Hearing type does not exist"); return(BadRequest(ModelState)); } var venue = await GetVenue(request.HearingVenueName); if (venue == null) { ModelState.AddModelError(nameof(request.HearingVenueName), "Hearing venue does not exist"); return(BadRequest(ModelState)); } var mapper = new ParticipantRequestToNewParticipantMapper(); var newParticipants = request.Participants.Select(x => mapper.MapRequestToNewParticipant(x, caseType)) .ToList(); var cases = request.Cases.Select(x => new Case(x.Number, x.Name)).ToList(); var createVideoHearingCommand = new CreateVideoHearingCommand(caseType, hearingType, request.ScheduledDateTime, request.ScheduledDuration, venue, newParticipants, cases, request.QuestionnaireNotRequired, request.AudioRecordingRequired) { HearingRoomName = request.HearingRoomName, OtherInformation = request.OtherInformation, CreatedBy = request.CreatedBy }; await _commandHandler.Handle(createVideoHearingCommand); var videoHearingId = createVideoHearingCommand.NewHearingId; var getHearingByIdQuery = new GetHearingByIdQuery(videoHearingId); var queriedVideoHearing = await _queryHandler.Handle <GetHearingByIdQuery, VideoHearing>(getHearingByIdQuery); var hearingMapper = new HearingToDetailResponseMapper(); var response = hearingMapper.MapHearingToDetailedResponse(queriedVideoHearing); return(CreatedAtAction(nameof(GetHearingDetailsById), new { hearingId = response.Id }, response)); }
public void OneTimeSetUp() { _validator = new BookNewHearingRequestValidation(); }