コード例 #1
0
        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());
            //}
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 public void AddSellableInventoryItemEntryEvent(ISellableInventoryItemEntryEvent e)
 {
     _innerStateEvents.Add((SellableInventoryItemEntryStateCreatedOrMergePatchedOrRemovedDto)e);
 }
コード例 #4
0
 void ISellableInventoryItemStateMergePatched.AddSellableInventoryItemEntryEvent(ISellableInventoryItemEntryEvent e)
 {
     this._sellableInventoryItemEntryEvents.AddSellableInventoryItemEntryEvent(e);
 }
コード例 #5
0
 public virtual void AddSellableInventoryItemEntryEvent(ISellableInventoryItemEntryEvent e)
 {
     ThrowOnInconsistentEventIds(e);
     this._sellableInventoryItemEntryEvents[e.SellableInventoryItemEntryEventId] = e;
 }
コード例 #6
0
 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);
     }
 }
コード例 #7
0
 protected void ThrowOnInconsistentEventIds(ISellableInventoryItemEntryEvent e)
 {
     ThrowOnInconsistentEventIds(this, e);
 }
コード例 #8
0
 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));
 }