public async Task <IActionResult> Post([FromBody] CreateAppointmentRequest request) { var appointmentCommand = mapper.Map <CreateAppointmentCommand>(request); appointmentCommand.CreatedBy = Guid.Parse(User.Claims.FirstOrDefault(x => x.Type == "id").Value); var getPatientTask = patientApi.GetPatient(request.PatientId); var getFromClinicTask = clinicApi.GetClinic(request.FromClinicId); var getToClinicTask = clinicApi.GetClinic(request.ToClinicId); await Task.WhenAll(getPatientTask, getFromClinicTask, getToClinicTask); var getPatientResultTask = getPatientTask.Result.Content.DeserializeStringContent <DTO.Patient.GetPatientResponse>(); var getFromClinicResultTask = getFromClinicTask.Result.Content.DeserializeStringContent <DTO.Clinic.GetClinicResponse>(); var getToClinicResultTask = getToClinicTask.Result.Content.DeserializeStringContent <DTO.Clinic.GetClinicResponse>(); await Task.WhenAll(getPatientResultTask, getFromClinicResultTask, getToClinicResultTask); appointmentCommand.FromClinicName = getFromClinicResultTask.Result.Name; appointmentCommand.ToClinicName = getToClinicResultTask.Result.Name; appointmentCommand.PatientName = getPatientResultTask.Result.FirstName + " " + getPatientResultTask.Result.LastName; var consultationCreateResponse = await appointmentApi.SaveAppointment(appointmentCommand); var consultationCreateContent = await consultationCreateResponse.Content.DeserializeStringContent <string>(); if (!consultationCreateResponse.IsSuccessStatusCode) { return(BadRequest(consultationCreateContent)); } return(CreatedAtAction(nameof(GetAppointmentById), new { id = consultationCreateContent }, consultationCreateContent)); }
public CreateAppointmentRequestValidator( IClinicApi clinicApi, IPatientApi patientApi) { RuleFor(x => x.FromClinicId) .NotEmpty() .WithMessage("Provide FromClinicId") .MustAsync(async(clinicId, cancellationToken) => { var clinic = await clinicApi.GetClinic(clinicId); if (!clinic.IsSuccessStatusCode) { return(false); } return(true); }) .WithMessage("No FromClinic found"); RuleFor(x => x.ToClinicId) .NotEmpty() .WithMessage("Provide ToClinicId") .MustAsync(async(clinicId, cancellationToken) => { var clinic = await clinicApi.GetClinic(clinicId); if (!clinic.IsSuccessStatusCode) { return(false); } return(true); }) .WithMessage("No ToClinic found"); RuleFor(x => x.PatientId) .NotEmpty() .WithMessage("Provide PatientId") .MustAsync(async(patientId, cancellationToken) => { var patient = await patientApi.GetPatient(patientId); if (!patient.IsSuccessStatusCode) { return(false); } return(true); }) .WithMessage("Patient does not exists"); }
public async Task <IActionResult> GetClinicById([FromRoute] Guid id) { var clinicRequest = await clinicApi.GetClinic(id); if (!clinicRequest.IsSuccessStatusCode) { return(NotFound()); } var clinic = await clinicRequest.Content.DeserializeStringContent <GetClinicResponse>(); return(Ok(clinic)); }