protected void ThrowOnWrongEvent(ISellableInventoryItemEntryEvent e) { var id = new System.Text.StringBuilder(); id.Append("[").Append("SellableInventoryItemEntry|"); var stateEntityIdSellableInventoryItemId = (this as IGlobalIdentity <SellableInventoryItemEntryId>).GlobalId.SellableInventoryItemId; var eventEntityIdSellableInventoryItemId = e.SellableInventoryItemEntryEventId.SellableInventoryItemId; if (stateEntityIdSellableInventoryItemId != eventEntityIdSellableInventoryItemId) { throw DomainError.Named("mutateWrongEntity", "Entity Id SellableInventoryItemId {0} in state but entity id SellableInventoryItemId {1} in event", stateEntityIdSellableInventoryItemId, eventEntityIdSellableInventoryItemId); } id.Append(stateEntityIdSellableInventoryItemId).Append(","); var stateEntityIdEntrySeqId = (this as IGlobalIdentity <SellableInventoryItemEntryId>).GlobalId.EntrySeqId; var eventEntityIdEntrySeqId = e.SellableInventoryItemEntryEventId.EntrySeqId; if (stateEntityIdEntrySeqId != eventEntityIdEntrySeqId) { throw DomainError.Named("mutateWrongEntity", "Entity Id EntrySeqId {0} in state but entity id EntrySeqId {1} in event", stateEntityIdEntrySeqId, eventEntityIdEntrySeqId); } id.Append(stateEntityIdEntrySeqId).Append(","); id.Append("]"); if (ForReapplying) { return; } var stateVersion = this.Version; var stateEvent = e is ISellableInventoryItemEntryStateEvent ? (ISellableInventoryItemEntryStateEvent)e : null; if (e == null) { return; } stateEvent.Version = stateVersion; //var stateEventStateVersion = stateEvent.Version; //if (SellableInventoryItemEntryState.VersionZero == stateEventStateVersion) //{ // stateEventStateVersion = stateEvent.Version = stateVersion; //} //if (stateVersion != stateEventStateVersion) //{ // throw OptimisticConcurrencyException.Create(stateVersion, stateEventStateVersion, id.ToString()); //} }
protected virtual ISellableInventoryItemStateMergePatched Map(IMergePatchSellableInventoryItem c) { var stateEventId = new SellableInventoryItemEventId(c.SellableInventoryItemId, c.Version); ISellableInventoryItemStateMergePatched e = NewSellableInventoryItemStateMergePatched(stateEventId); e.CommandId = c.CommandId; e.CreatedBy = (string)c.RequesterId; e.CreatedAt = ApplicationContext.Current.TimestampService.Now <DateTime>(); var version = c.Version; decimal sellableQuantity = _state.SellableQuantity; foreach (ISellableInventoryItemEntryCommand innerCommand in c.SellableInventoryItemEntryCommands) { ThrowOnInconsistentCommands(c, innerCommand); ISellableInventoryItemEntryEvent innerEvent = Map(innerCommand, c, version, _state); e.AddSellableInventoryItemEntryEvent(innerEvent); // //////////////// if (!(innerEvent is ISellableInventoryItemEntryStateCreated)) { continue; } var entryCreated = (ISellableInventoryItemEntryStateCreated)innerEvent; sellableQuantity = sellableQuantity + (entryCreated.SellableQuantity != null ? entryCreated.SellableQuantity.GetValueOrDefault() : default(decimal)); // //////////////// } e.SellableQuantity = sellableQuantity; return(e); }
public void AddSellableInventoryItemEntryEvent(ISellableInventoryItemEntryEvent e) { _innerStateEvents.Add((SellableInventoryItemEntryStateCreatedOrMergePatchedOrRemovedDto)e); }
void ISellableInventoryItemStateMergePatched.AddSellableInventoryItemEntryEvent(ISellableInventoryItemEntryEvent e) { this._sellableInventoryItemEntryEvents.AddSellableInventoryItemEntryEvent(e); }
public virtual void AddSellableInventoryItemEntryEvent(ISellableInventoryItemEntryEvent e) { ThrowOnInconsistentEventIds(e); this._sellableInventoryItemEntryEvents[e.SellableInventoryItemEntryEventId] = e; }
public static void ThrowOnInconsistentEventIds(ISellableInventoryItemEvent oe, ISellableInventoryItemEntryEvent e) { if (!oe.SellableInventoryItemEventId.SellableInventoryItemId.Equals(e.SellableInventoryItemEntryEventId.SellableInventoryItemId)) { throw DomainError.Named("inconsistentEventIds", "Outer Id SellableInventoryItemId {0} but inner id SellableInventoryItemId {1}", oe.SellableInventoryItemEventId.SellableInventoryItemId, e.SellableInventoryItemEntryEventId.SellableInventoryItemId); } }
protected void ThrowOnInconsistentEventIds(ISellableInventoryItemEntryEvent e) { ThrowOnInconsistentEventIds(this, e); }
public virtual SellableInventoryItemEntryStateCreatedOrMergePatchedOrRemovedDto ToSellableInventoryItemEntryStateEventDto(ISellableInventoryItemEntryEvent stateEvent) { if (stateEvent.EventType == StateEventType.Created) { var e = (ISellableInventoryItemEntryStateCreated)stateEvent; return(ToSellableInventoryItemEntryStateCreatedDto(e)); } throw DomainError.Named("invalidEventType", String.Format("Invalid state event type: {0}", stateEvent.EventType)); }