public void UpdateStatus(BookingStatus newStatus, string updatedBy, string cancelReason) { if (string.IsNullOrEmpty(updatedBy)) { throw new ArgumentNullException(nameof(updatedBy)); } if (newStatus == BookingStatus.Cancelled && string.IsNullOrEmpty(cancelReason)) { throw new ArgumentNullException(nameof(cancelReason)); } var bookingStatusTransition = new BookingStatusTransition(); var statusChangedEvent = new StatusChangedEvent(Status, newStatus); if (!bookingStatusTransition.IsValid(statusChangedEvent)) { throw new DomainRuleException("BookingStatus", $"Cannot change the booking status from {Status} to {newStatus}"); } Status = newStatus; UpdatedDate = DateTime.UtcNow; UpdatedBy = updatedBy; CancelReason = cancelReason; }
public bool IsValid(StatusChangedEvent statusChangedEvent) { return(_permissibleTransistions.Any(x => x.Key == statusChangedEvent.CurrentStatus && x.Value == statusChangedEvent.NewStatus)); }