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));
        }
Example #2
0
        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");
        }
Example #3
0
        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));
        }