示例#1
0
 /// <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;
 }
示例#2
0
 /// <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));
        }