protected bool IsRepeatedCommand(IInventoryItemRequirementCommand command, IEventStoreAggregateId eventStoreAggregateId, IInventoryItemRequirementState state) { bool repeated = false; if (((IInventoryItemRequirementStateProperties)state).Version == command.AggregateVersion + 1) { if (state.CommandId == command.CommandId) { repeated = true; } } return(repeated); }
protected virtual void Update(IInventoryItemRequirementCommand c, Action <IInventoryItemRequirementAggregate> action) { var aggregateId = c.AggregateId; var state = StateRepository.Get(aggregateId, false); var aggregate = GetInventoryItemRequirementAggregate(state); var eventStoreAggregateId = ToEventStoreAggregateId(aggregateId); var repeated = IsRepeatedCommand(c, eventStoreAggregateId, state); if (repeated) { return; } aggregate.ThrowOnInvalidStateTransition(c); action(aggregate); Persist(eventStoreAggregateId, aggregate, state); }
protected void ThrowOnInconsistentCommands(IInventoryItemRequirementCommand command, IInventoryItemRequirementEntryCommand innerCommand) { var properties = command as ICreateOrMergePatchOrDeleteInventoryItemRequirement; var innerProperties = innerCommand as ICreateOrMergePatchOrRemoveInventoryItemRequirementEntry; if (properties == null || innerProperties == null) { return; } if (innerProperties.InventoryItemRequirementId == default(InventoryItemId)) { innerProperties.InventoryItemRequirementId = properties.InventoryItemRequirementId; } else { var outerInventoryItemRequirementIdName = "InventoryItemRequirementId"; var outerInventoryItemRequirementIdValue = properties.InventoryItemRequirementId; var innerInventoryItemRequirementIdName = "InventoryItemRequirementId"; var innerInventoryItemRequirementIdValue = innerProperties.InventoryItemRequirementId; ThrowOnInconsistentIds(innerProperties, innerInventoryItemRequirementIdName, innerInventoryItemRequirementIdValue, outerInventoryItemRequirementIdName, outerInventoryItemRequirementIdValue); } }// END ThrowOnInconsistentCommands /////////////////////
private static bool IsCommandCreate(IInventoryItemRequirementCommand c) { return(c.Version == InventoryItemRequirementState.VersionZero); }
protected virtual IInventoryItemRequirementEntryStateCreated MapCreate(ICreateInventoryItemRequirementEntry c, IInventoryItemRequirementCommand outerCommand, long version, IInventoryItemRequirementState outerState) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new InventoryItemRequirementEntryEventId(c.InventoryItemRequirementId, c.EntrySeqId, version); IInventoryItemRequirementEntryStateCreated e = NewInventoryItemRequirementEntryStateCreated(stateEventId); var s = outerState.Entries.Get(c.EntrySeqId, true); e.Quantity = c.Quantity; e.SourceEventId = c.SourceEventId; e.CreatedBy = (string)c.RequesterId; e.CreatedAt = ApplicationContext.Current.TimestampService.Now <DateTime>(); return(e); }// END Map(ICreate... ////////////////////////////
}// END ThrowOnInconsistentCommands ///////////////////// protected virtual IInventoryItemRequirementEntryEvent Map(IInventoryItemRequirementEntryCommand c, IInventoryItemRequirementCommand outerCommand, long version, IInventoryItemRequirementState outerState) { var create = (c.CommandType == CommandType.Create) ? (c as ICreateInventoryItemRequirementEntry) : null; if (create != null) { return(MapCreate(create, outerCommand, version, outerState)); } throw new NotSupportedException(); }