/// <summary> /// Reschedule Appointment Command Handler /// </summary> /// <param name="appointmentRepository"></param> /// <param name="patientsRepository"></param> /// <param name="appointmentMustExistValidator"></param> /// <param name="appointmentEquipmentIsAvailableValidator"></param> /// <param name="mediator"></param> public RescheduleAppointmentCommandHandler(IAppointmentRepository appointmentWriteRepository, IBaseRepository <Appointment> appointmentRepository, IBaseRepository <Patient> patientsRepository, IAppointmentMustExistValidator appointmentMustExistValidator, IAppointmentEquipmentIsAvailableValidator appointmentEquipmentIsAvailableValidator, IMediator mediator) { _appointmentWriteRepository = appointmentWriteRepository; _appointmentRepository = appointmentRepository; _patientsRepository = patientsRepository; _appointmentMustExistValidator = appointmentMustExistValidator; _appointmentEquipmentIsAvailableValidator = appointmentEquipmentIsAvailableValidator; _mediator = mediator; }
/// <summary> /// Cancel Appointment Command Handler /// </summary> /// <param name="appointmentRepository"></param> /// <param name="appointmentMustExistValidator"></param> /// <param name="mediator"></param> public CancelAppointmentCommandHandler(IAppointmentRepository appointmentWriteRepository, IBaseRepository <Appointment> appointmentRepository, IBaseRepository <Patient> patientsRepository, IAppointmentMustExistValidator appointmentMustExistValidator, IEquipmentService equipmentService, IMediator mediator) { _appointmentWriteRepository = appointmentWriteRepository; _appointmentRepository = appointmentRepository; _patientsRepository = patientsRepository; _appointmentMustExistValidator = appointmentMustExistValidator; _equipmentService = equipmentService; _mediator = mediator; }
/// <summary> /// Appointment Cannot Be Cancelled 3Days Prior To Date Rule /// </summary> /// <param name="appointmentDate"></param> public AppointmentMustExistRule(IAppointmentMustExistValidator appointmentMustExistValidator, int appointmentId) { _appointmentMustExistValidator = appointmentMustExistValidator; _appointmentId = appointmentId; }
/// <summary> /// Cancel Appointment /// </summary> /// <param name="appointmentMustExistRuleValidator"></param> /// <param name="appointmentId"></param> /// <param name="referenceCode"></param> public static void CancelAppointment(int appointmentId, DateTime date, IAppointmentMustExistValidator appointmentMustExistValidator) { // validate the appointment exists and is not 3 days prior to schduled date. ValidateBusinessRule(new AppointmentMustExistRule(appointmentMustExistValidator, appointmentId)); ValidateBusinessRule(new AppointmentCannotBeCancelled3DaysPriorToDateRule(date)); }
/// <summary> /// Update Appointment /// </summary> /// <param name="appointmentId"></param> /// <param name="currentAppointmentDate"></param> /// <param name="newAppointmentDate"></param> /// <param name="newAppointmentStartTime"></param> /// <param name="newAppointmentEndTime"></param> /// <param name="appointmentMustExistValidator"></param> /// <param name="appointmentEquipmentIsAvailableValidator"></param> /// <returns></returns> public static void UpdateAppointment(int appointmentId, DateTime currentAppointmentDate, DateTime newAppointmentDate, TimeSpan newAppointmentStartTime, TimeSpan newAppointmentEndTime, IAppointmentMustExistValidator appointmentMustExistValidator, IAppointmentEquipmentIsAvailableValidator appointmentEquipmentIsAvailableValidator) { // The appointment must exist. ValidateBusinessRule(new AppointmentMustExistRule(appointmentMustExistValidator, appointmentId)); // Appointment can only be changed up to 2 days before the appointment date ValidateBusinessRule(new AppointmentChangeIsLessThan2DaysPriorToDateRule(currentAppointmentDate, newAppointmentDate)); // Appointments can only be made for 2 weeks later at most. ValidateBusinessRule(new AppointmentIsLessThanTwoWeeksInAdvanceRule(newAppointmentDate)); // Equipment Availability rule ValidateBusinessRule(new AppointmentEquipmentIsAvailableRule(appointmentEquipmentIsAvailableValidator, newAppointmentDate, newAppointmentStartTime, newAppointmentEndTime)); }