public async Task <IActionResult> ScheduleAppointment(ScheduleAppointmentRequest request) { var appointmentId = _identifierGenerationService.Generate(); var command = new ScheduleAppointmentCommand(appointmentId, request.DoctorId, request.PatientId, request.AppointmentAt, request.AppointmentDurationInMinutes); await _scheduleAppointmentCommandHandler.HandleAsync(command); return(CreatedAtAction(nameof(GetById), new { AppointmentId = appointmentId }, null)); }
public async Task Edit(int id, string title, string Description, DateTime startTime, string patientId) { var appointment = this.db.Appointments.Find(id); if (patientId != null && patientId != appointment.PatientId) { if (appointment.PatientId != null) { var oldPatientScheduleId = GetScheduleId(appointment.PatientId); var oldUserAppointment = this.db.ScheduleAppointments.Find(oldPatientScheduleId, appointment.Id); if (oldUserAppointment != null) { this.db.ScheduleAppointments.Remove(oldUserAppointment); } var oldUserRequestAppointment = this.db.RequestedAppointments.Find(oldPatientScheduleId, appointment.Id); if (oldUserRequestAppointment != null) { this.db.RequestedAppointments.Remove(oldUserRequestAppointment); } } int patientScheduleId = GetScheduleId(patientId); var patientAlreadyRequested = this.db.RequestedAppointments.Find(patientScheduleId, appointment.Id); if (patientAlreadyRequested != null) { patientAlreadyRequested.Confirm = false; } else { var patientScheduleAppointment = new ScheduleAppointmentRequest { RequestedScheduleId = patientScheduleId, AppointmentRequestId = appointment.Id, Confirm = false }; this.db.Add(patientScheduleAppointment); } } appointment.Title = title; appointment.Description = Description; appointment.StartTime = startTime; appointment.PatientId = patientId; await this.db.SaveChangesAsync(); }
public ValidationResult Validate(string workOrderReference, ScheduleAppointmentRequest request) { var validationResult = new ValidationResult(); if (string.IsNullOrEmpty(workOrderReference)) { validationResult.Valid = false; validationResult.ErrorMessages.Add("You must provide a work order reference"); } else { var workOrder = Task.Run(() => _hackneyRepairsService.GetWorkOrderDetails(workOrderReference)).Result; if (string.IsNullOrEmpty(workOrder.wo_ref)) { validationResult.Valid = false; validationResult.ErrorMessages.Add("Please provide a valid work order reference"); } } if (string.IsNullOrEmpty(request.BeginDate)) { validationResult.Valid = false; validationResult.ErrorMessages.Add("You must provide a begin Date"); } else { DateTime beginDateTime; if (!DateTime.TryParse(request.BeginDate, out beginDateTime)) { validationResult.Valid = false; validationResult.ErrorMessages.Add("Please provide a valid begin date in the following format. Eg:2017-11-10T10:00:00Z"); } } if (string.IsNullOrEmpty(request.EndDate)) { validationResult.Valid = false; validationResult.ErrorMessages.Add("You must provide a end Date"); } else { DateTime endDateTime; if (!DateTime.TryParse(request.EndDate, out endDateTime)) { validationResult.Valid = false; validationResult.ErrorMessages.Add("Please provide a valid end date in the following format. Eg:2017-11-10T10:00:00Z"); } } return(validationResult); }
public void returns_false_and_errormessage_if_schedule_booking_request_is_missing_work_order_reference() { var fakeRequestBuilder = new Mock <IHackneyRepairsService>(); fakeRequestBuilder.Setup(service => service.GetWorkOrderDetails("015580954")) .ReturnsAsync(new DrsOrder { wo_ref = "015580954" }); var validator = new ScheduleBookingRequestValidator(fakeRequestBuilder.Object); var request = new ScheduleAppointmentRequest { BeginDate = "2017-11-10T10:00:00Z", EndDate = "2017-11-10T12:00:00Z" }; var result = validator.Validate("", request); Assert.False(result.Valid); Assert.Equal(result.ErrorMessages.Count, 1); Assert.Contains("You must provide a work order reference", result.ErrorMessages); }
public void returns_true_if_schedule_booking_request_is_valid() { var fakeRequestBuilder = new Mock <IHackneyRepairsService>(); fakeRequestBuilder.Setup(service => service.GetWorkOrderDetails("015580954")) .ReturnsAsync(new DrsOrder { wo_ref = "015580954" }); var validator = new ScheduleBookingRequestValidator(fakeRequestBuilder.Object); var request = new ScheduleAppointmentRequest { BeginDate = "2017-11-10T10:00:00Z", EndDate = "2017-11-10T12:00:00Z" }; var result = validator.Validate("015580954", request); Assert.True(result.Valid); Assert.Equal(result.ErrorMessages.Count, 0); }
public async Task <JsonResult> Post(string workOrderReference, [FromBody] ScheduleAppointmentRequest request) { try { var validationResult = _scheduleBookingRequestValidator.Validate(workOrderReference, request); if (validationResult.Valid) { var appointmentsActions = new AppointmentActions(_loggerAdapter, _appointmentsService, _serviceRequestBuilder, _repairsService, _repairsServiceRequestBuilder); var result = await appointmentsActions.BookAppointment(workOrderReference, DateTime.Parse(request.BeginDate), DateTime.Parse(request.EndDate)); var json = Json(result); json.StatusCode = 200; json.ContentType = "application/json"; return(json); } else { var errors = validationResult.ErrorMessages.Select(error => new ApiErrorMessage { developerMessage = error, userMessage = error }).ToList(); var jsonResponse = Json(errors); jsonResponse.StatusCode = 400; return(jsonResponse); } } catch (Exception e) { var errorMessage = new ApiErrorMessage { developerMessage = e.Message, userMessage = "We had some problems processing your request" }; var jsonResponse = Json(errorMessage); jsonResponse.StatusCode = 500; return(jsonResponse); } }
public void returns_false_and_errormessage_if_end_date_is_not_formatted_correctly() { var fakeRequestBuilder = new Mock <IHackneyRepairsService>(); fakeRequestBuilder.Setup(service => service.GetWorkOrderDetails("015580954")) .ReturnsAsync(new DrsOrder { wo_ref = "015580954" }); var validator = new ScheduleBookingRequestValidator(fakeRequestBuilder.Object); var request = new ScheduleAppointmentRequest { BeginDate = "2017-11-10T10:00:00Z", EndDate = "2017-11-10T12:00:00Zdfdf" }; var result = validator.Validate("015580954", request); Assert.False(result.Valid); Assert.Equal(result.ErrorMessages.Count, 1); Assert.True(result.ErrorMessages[0].Contains("Please provide a valid end date")); }
public async Task <bool> AddAppointment(string title, string description, DateTime startTime, string userId, string patientId) { var appointment = new Appointment { Title = title, Description = description, StartTime = startTime, PatientId = patientId, CreatorId = userId }; this.db.Add(appointment); int scheduleId = GetScheduleId(userId); if (patientId != null) { int patientScheduleId = GetScheduleId(patientId); var patientScheduleAppointment = new ScheduleAppointmentRequest { RequestedScheduleId = patientScheduleId, AppointmentRequestId = appointment.Id, Confirm = false }; this.db.Add(patientScheduleAppointment); } var scheduleAppointment = new ScheduleAppointment { ScheduleId = scheduleId, AppointmentId = appointment.Id }; this.db.Add(scheduleAppointment); await this.db.SaveChangesAsync(); return(true); }