Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
 public void OneTimeSetUp()
 {
     _validator = new BookNewHearingRequestValidation();
 }