/// <summary> /// Appointment Equipment Is Available Rule /// </summary> /// <param name="appointmentEquipmentIsAvailableValidator"></param> /// <param name="appointmentDate"></param> public AppointmentEquipmentIsAvailableRule(IAppointmentEquipmentIsAvailableValidator appointmentEquipmentIsAvailableValidator, DateTime appointmentDate, TimeSpan startTime, TimeSpan endTime) { _appointmentEquipmentIsAvailableValidator = appointmentEquipmentIsAvailableValidator; _appointmentDate = appointmentDate; _startTime = startTime; _endTime = endTime; }
/// <summary> /// /// </summary> /// <param name="appointmentRepository"></param> /// <param name="appointmentEquipmentIsAvailableValidator"></param> /// <param name="appointmentPatientMustExistRuleValidator"></param> /// <param name="mediator"></param> public BookAppointmentCommandHandler(IAppointmentRepository appointmentRepository, IBaseRepository <Patient> repository, IEquipmentService equipmentService, IAppointmentEquipmentIsAvailableValidator appointmentEquipmentIsAvailableValidator, IAppointmentPatientMustExistRuleValidator appointmentPatientMustExistRuleValidator, IMediator mediator) { _appointmentRepository = appointmentRepository; _repository = repository; _equipmentService = equipmentService; _appointmentEquipmentIsAvailableValidator = appointmentEquipmentIsAvailableValidator; _appointmentPatientMustExistRuleValidator = appointmentPatientMustExistRuleValidator; _mediator = mediator; }
/// <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> /// 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)); }
/// <summary> /// BookAppointment /// </summary> /// <param name="patientId"></param> /// <param name="equipmentId"></param> /// <param name="referenceCode"></param> /// <param name="appointmentDate"></param> /// <param name="patientMustExistRuleValidator"></param> /// <param name="timeSlotRuleValidator"></param> /// <param name="appointmentDateIsLessThanTwoWeeksInAdvanceRuleValidator"></param> /// <returns></returns> public static Appointment BookAppointment(int patientId, int equipmentId, string referenceCode, DateTime appointmentDate, TimeSpan startTime, TimeSpan endTime, IAppointmentEquipmentIsAvailableValidator appointmentEquipmentIsAvailableValidator, IAppointmentPatientMustExistRuleValidator patientMustExistRuleValidator) { // validate the business rules // Appointments can only be made for 2 weeks later at most. ValidateBusinessRule(new AppointmentIsLessThanTwoWeeksInAdvanceRule(appointmentDate)); // Assumption that the patient has to registered for them to be able to book an appointment. ValidateBusinessRule(new AppointmentPatientMustExistRule(patientMustExistRuleValidator, patientId)); // Appointments can be made between 08:00 and 16:00. An appointment takes 1 hour. ValidateBusinessRule(new AppointmentBookingTimeSlotRule(startTime, endTime)); ValidateBusinessRule(new AppointmentEquipmentIsAvailableRule(appointmentEquipmentIsAvailableValidator, appointmentDate, startTime, endTime)); return(new Appointment(patientId, equipmentId, referenceCode, appointmentDate, startTime, endTime)); }