protected virtual IInOutLineStateCreated MapCreate(ICreateInOutLine c, IInOutCommand outerCommand, long version, IInOutState outerState) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new InOutLineStateEventId(c.InOutDocumentNumber, c.SkuId, version); IInOutLineStateCreated e = NewInOutLineStateCreated(stateEventId); var s = outerState.InOutLines.Get(c.SkuId); e.LineNumber = c.LineNumber; e.Description = c.Description; e.LocatorId = c.LocatorId; e.Product = c.Product; e.UomId = c.UomId; e.MovementQuantity = c.MovementQuantity; e.ConfirmedQuantity = c.ConfirmedQuantity; e.ScrappedQuantity = c.ScrappedQuantity; e.TargetQuantity = c.TargetQuantity; e.PickedQuantity = c.PickedQuantity; e.IsInvoiced = c.IsInvoiced; e.AttributeSetInstanceId = c.AttributeSetInstanceId; e.IsDescription = c.IsDescription; e.Processed = c.Processed; e.QuantityEntered = c.QuantityEntered; e.RmaLineNumber = c.RmaLineNumber; e.ReversalLineNumber = c.ReversalLineNumber; e.Active = c.Active; e.CreatedBy = (string)c.RequesterId; e.CreatedAt = DateTime.Now; return(e); }// END Map(ICreate... ////////////////////////////
protected virtual IInOutLineStateCreated MapCreate(ICreateInOutLine c, IInOutCommand outerCommand, long version, IInOutState outerState) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new InOutLineEventId(c.InOutDocumentNumber, c.LineNumber, version); IInOutLineStateCreated e = NewInOutLineStateCreated(stateEventId); var s = outerState.InOutLines.Get(c.LineNumber, true); e.LocatorId = c.LocatorId; e.ProductId = c.ProductId; e.AttributeSetInstanceId = c.AttributeSetInstanceId; e.DamageStatusIds = c.DamageStatusIds; e.Description = c.Description; e.QuantityUomId = c.QuantityUomId; e.MovementQuantity = c.MovementQuantity; e.PickedQuantity = c.PickedQuantity; e.IsInvoiced = c.IsInvoiced; e.Processed = c.Processed; e.RmaLineNumber = c.RmaLineNumber; e.ReversalLineNumber = c.ReversalLineNumber; e.Active = c.Active; e.CreatedBy = (string)c.RequesterId; e.CreatedAt = ApplicationContext.Current.TimestampService.Now <DateTime>(); foreach (ICreateInOutLineImage innerCommand in c.InOutLineImages) { ThrowOnInconsistentCommands(c, innerCommand); IInOutLineImageStateCreated innerEvent = MapCreate(innerCommand, c, version, s); e.AddInOutLineImageEvent(innerEvent); } return(e); }// END Map(ICreate... ////////////////////////////
private static InOutCommands.DocumentAction NewDocumentAction(string value, IInOutCommand c) { return(new InOutCommands.DocumentAction() { Value = value, DocumentNumber = c.DocumentNumber, Version = c.Version, CommandId = c.CommandId, RequesterId = Convert.ToString(c.RequesterId), }); }
}// END Map(IMergePatch... //////////////////////////// protected virtual IInOutLineStateRemoved MapRemove(IRemoveInOutLine c, IInOutCommand outerCommand, long version) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new InOutLineStateEventId(c.InOutDocumentNumber, c.SkuId, version); IInOutLineStateRemoved e = NewInOutLineStateRemoved(stateEventId); e.CreatedBy = (string)c.RequesterId; e.CreatedAt = DateTime.Now; return(e); }// END Map(IRemove... ////////////////////////////
}// END Map(IMergePatch... //////////////////////////// protected virtual IInOutLineStateRemoved MapRemove(IRemoveInOutLine c, IInOutCommand outerCommand, long version) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new InOutLineEventId(c.InOutDocumentNumber, c.LineNumber, version); IInOutLineStateRemoved e = NewInOutLineStateRemoved(stateEventId); e.CreatedBy = (string)c.RequesterId; e.CreatedAt = ApplicationContext.Current.TimestampService.Now <DateTime>(); return(e); }// END Map(IRemove... ////////////////////////////
protected bool IsRepeatedCommand(IInOutCommand command, IEventStoreAggregateId eventStoreAggregateId, IInOutState state) { bool repeated = false; if (((IInOutStateProperties)state).Version > command.AggregateVersion) { var lastEvent = EventStore.GetEvent(typeof(IInOutEvent), eventStoreAggregateId, command.AggregateVersion); if (lastEvent != null && lastEvent.CommandId == command.CommandId) { repeated = true; } } return(repeated); }
protected virtual IInOutImageStateCreated MapCreate(ICreateInOutImage c, IInOutCommand outerCommand, long version, IInOutState outerState) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new InOutImageEventId(c.InOutDocumentNumber, c.SequenceId, version); IInOutImageStateCreated e = NewInOutImageStateCreated(stateEventId); var s = outerState.InOutImages.Get(c.SequenceId, true); e.Url = c.Url; e.Active = c.Active; e.CreatedBy = (string)c.RequesterId; e.CreatedAt = ApplicationContext.Current.TimestampService.Now <DateTime>(); return(e); }// END Map(ICreate... ////////////////////////////
protected void ThrowOnInconsistentCommands(IInOutCommand command, IInOutLineCommand innerCommand) { var properties = command as ICreateOrMergePatchOrDeleteInOut; var innerProperties = innerCommand as ICreateOrMergePatchOrRemoveInOutLine; if (properties == null || innerProperties == null) { return; } var outerDocumentNumberName = "DocumentNumber"; var outerDocumentNumberValue = properties.DocumentNumber; var innerInOutDocumentNumberName = "InOutDocumentNumber"; var innerInOutDocumentNumberValue = innerProperties.InOutDocumentNumber; SetNullInnerIdOrThrowOnInconsistentIds(innerProperties, innerInOutDocumentNumberName, innerInOutDocumentNumberValue, outerDocumentNumberName, outerDocumentNumberValue); }// END ThrowOnInconsistentCommands /////////////////////
protected virtual void Update(IInOutCommand c, Action <IInOutAggregate> action) { var aggregateId = c.AggregateId; var state = StateRepository.Get(aggregateId, false); var aggregate = GetInOutAggregate(state); var eventStoreAggregateId = ToEventStoreAggregateId(aggregateId); var repeated = IsRepeatedCommand(c, eventStoreAggregateId, state); if (repeated) { return; } aggregate.ThrowOnInvalidStateTransition(c); action(aggregate); Persist(eventStoreAggregateId, aggregate, state); }
protected virtual void Update(IInOutCommand c, Action <IInOutAggregate> action) { var aggregateId = c.AggregateId; var state = StateRepository.Get(aggregateId); var aggregate = GetInOutAggregate(state); var eventStoreAggregateId = ToEventStoreAggregateId(aggregateId); var repeated = IsRepeatedCommand(c, eventStoreAggregateId, state); if (repeated) { return; } aggregate.ThrowOnInvalidStateTransition(c); action(aggregate); EventStore.AppendEvents(eventStoreAggregateId, ((IInOutStateProperties)state).Version, aggregate.Changes, () => { StateRepository.Save(state); }); }
protected void ThrowOnInconsistentCommands(IInOutCommand command, IInOutImageCommand innerCommand) { var properties = command as ICreateOrMergePatchOrDeleteInOut; var innerProperties = innerCommand as ICreateOrMergePatchOrRemoveInOutImage; if (properties == null || innerProperties == null) { return; } if (innerProperties.InOutDocumentNumber == default(string)) { innerProperties.InOutDocumentNumber = properties.DocumentNumber; } else { var outerDocumentNumberName = "DocumentNumber"; var outerDocumentNumberValue = properties.DocumentNumber; var innerInOutDocumentNumberName = "InOutDocumentNumber"; var innerInOutDocumentNumberValue = innerProperties.InOutDocumentNumber; ThrowOnInconsistentIds(innerProperties, innerInOutDocumentNumberName, innerInOutDocumentNumberValue, outerDocumentNumberName, outerDocumentNumberValue); } }// END ThrowOnInconsistentCommands /////////////////////
}// END ThrowOnInconsistentCommands ///////////////////// protected virtual IInOutLineStateEvent Map(IInOutLineCommand c, IInOutCommand outerCommand, long version, IInOutState outerState) { var create = (c.CommandType == CommandType.Create) ? (c as ICreateInOutLine) : null; if (create != null) { return(MapCreate(create, outerCommand, version, outerState)); } var merge = (c.CommandType == CommandType.MergePatch) ? (c as IMergePatchInOutLine) : null; if (merge != null) { return(MapMergePatch(merge, outerCommand, version, outerState)); } var remove = (c.CommandType == CommandType.Remove) ? (c as IRemoveInOutLine) : null; if (remove != null) { return(MapRemove(remove, outerCommand, version)); } throw new NotSupportedException(); }
private static bool IsCommandCreate(IInOutCommand c) { return(c.Version == InOutState.VersionZero); }
}// END Map(ICreate... //////////////////////////// protected virtual IInOutLineStateMergePatched MapMergePatch(IMergePatchInOutLine c, IInOutCommand outerCommand, long version, IInOutState outerState) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new InOutLineEventId(c.InOutDocumentNumber, c.LineNumber, version); IInOutLineStateMergePatched e = NewInOutLineStateMergePatched(stateEventId); var s = outerState.InOutLines.Get(c.LineNumber); e.LocatorId = c.LocatorId; e.ProductId = c.ProductId; e.AttributeSetInstanceId = c.AttributeSetInstanceId; e.Description = c.Description; e.QuantityUomId = c.QuantityUomId; e.MovementQuantity = c.MovementQuantity; e.PickedQuantity = c.PickedQuantity; e.IsInvoiced = c.IsInvoiced; e.Processed = c.Processed; e.RmaLineNumber = c.RmaLineNumber; e.ReversalLineNumber = c.ReversalLineNumber; e.Active = c.Active; e.IsPropertyLocatorIdRemoved = c.IsPropertyLocatorIdRemoved; e.IsPropertyProductIdRemoved = c.IsPropertyProductIdRemoved; e.IsPropertyAttributeSetInstanceIdRemoved = c.IsPropertyAttributeSetInstanceIdRemoved; e.IsPropertyDescriptionRemoved = c.IsPropertyDescriptionRemoved; e.IsPropertyQuantityUomIdRemoved = c.IsPropertyQuantityUomIdRemoved; e.IsPropertyMovementQuantityRemoved = c.IsPropertyMovementQuantityRemoved; e.IsPropertyPickedQuantityRemoved = c.IsPropertyPickedQuantityRemoved; e.IsPropertyIsInvoicedRemoved = c.IsPropertyIsInvoicedRemoved; e.IsPropertyProcessedRemoved = c.IsPropertyProcessedRemoved; e.IsPropertyRmaLineNumberRemoved = c.IsPropertyRmaLineNumberRemoved; e.IsPropertyReversalLineNumberRemoved = c.IsPropertyReversalLineNumberRemoved; e.IsPropertyActiveRemoved = c.IsPropertyActiveRemoved; e.CreatedBy = (string)c.RequesterId; e.CreatedAt = ApplicationContext.Current.TimestampService.Now <DateTime>(); return(e); }// END Map(IMergePatch... ////////////////////////////