public void Book(BookAppointmentRequest request) { var session = _sessionFactory.OpenSession(); CurrentSessionContext.Bind(session); try { using (var transactionScope = new TransactionScope()) { DomainEvents.Register<AppointmentBookedEvent>(AppointmentBooked); Appointment.Book(request.ConsultantId, request.Id, request.Date, request.StartTime, request.EndTime, request.LeadName, request.Address); session.Flush(); transactionScope.Complete(); } } finally { CurrentSessionContext.Unbind(_sessionFactory); DomainEvents.ClearCallbacks(); session.Dispose(); } }
public ActionResult BookUpdate(BookAppointmentViewModel viewModel) { if (viewModel.Updating) { var updateBookingRequest = new UpdateAppointmentRequest { Id = viewModel.AppointmentId.Value, Date = viewModel.Date, StartTime = viewModel.StartTime, EndTime = viewModel.EndTime, LeadName = viewModel.LeadName, Address = viewModel.Address }; var validationResult = _appointmentService.ValidateUpdate(updateBookingRequest); if (!validationResult.IsValid) { foreach (var error in validationResult.Errors) ModelState.AddModelError(error.Field ?? "", error.Text); return View("BookUpdate", viewModel); } _appointmentService.Update(updateBookingRequest); } else { Guid id = Guid.NewGuid(); var makeBookingRequest = new BookAppointmentRequest { Id = id, ConsultantId = viewModel.ConsultantId.Value, Date = viewModel.Date, StartTime = viewModel.StartTime, EndTime = viewModel.EndTime, LeadName = viewModel.LeadName, Address = viewModel.Address }; var validationResult = _appointmentService.ValidateBook(makeBookingRequest); if (!validationResult.IsValid) { foreach (var error in validationResult.Errors) ModelState.AddModelError(error.Field ?? "", error.Text); return View("BookUpdate", viewModel); } _appointmentService.Book(makeBookingRequest); } return RedirectToAction("Index", "Consultant", new { consultantId = viewModel.ConsultantId }); }
public ValidationMessageCollection ValidateBook(BookAppointmentRequest request) { var session = _sessionFactory.OpenSession(); CurrentSessionContext.Bind(session); try { return Appointment.ValidateBook( request.ConsultantId, request.Date, request.StartTime, request.EndTime, request.LeadName, request.Address); } finally { CurrentSessionContext.Unbind(_sessionFactory); session.Dispose(); } }