protected bool IsRepeatedCommand(IAttributeCommand command, IEventStoreAggregateId eventStoreAggregateId, IAttributeState state) { bool repeated = false; if (((IAttributeStateProperties)state).Version > command.AggregateVersion) { var lastEvent = EventStore.GetEvent(typeof(IAttributeEvent), eventStoreAggregateId, command.AggregateVersion); if (lastEvent != null && lastEvent.CommandId == command.CommandId) { repeated = true; } } return(repeated); }
protected void ThrowOnInconsistentCommands(IAttributeCommand command, IAttributeValueCommand innerCommand) { var properties = command as ICreateOrMergePatchOrDeleteAttribute; var innerProperties = innerCommand as ICreateOrMergePatchOrRemoveAttributeValue; if (properties == null || innerProperties == null) { return; } var outerAttributeIdName = "AttributeId"; var outerAttributeIdValue = properties.AttributeId; var innerAttributeIdName = "AttributeId"; var innerAttributeIdValue = innerProperties.AttributeId; SetNullInnerIdOrThrowOnInconsistentIds(innerProperties, innerAttributeIdName, innerAttributeIdValue, outerAttributeIdName, outerAttributeIdValue); }// END ThrowOnInconsistentCommands /////////////////////
protected virtual void Update(IAttributeCommand c, Action <IAttributeAggregate> action) { var aggregateId = c.AggregateId; var state = StateRepository.Get(aggregateId, false); var aggregate = GetAttributeAggregate(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(IAttributeCommand c, Action <IAttributeAggregate> action) { var aggregateId = c.AggregateId; var state = StateRepository.Get(aggregateId); var aggregate = GetAttributeAggregate(state); var eventStoreAggregateId = ToEventStoreAggregateId(aggregateId); var repeated = IsRepeatedCommand(c, eventStoreAggregateId, state); if (repeated) { return; } aggregate.ThrowOnInvalidStateTransition(c); action(aggregate); EventStore.AppendEvents(eventStoreAggregateId, ((IAttributeStateProperties)state).Version, aggregate.Changes, () => { StateRepository.Save(state); }); }
}// END ThrowOnInconsistentCommands ///////////////////// protected void ThrowOnInconsistentCommands(IAttributeCommand command, IAttributeAliasCommand innerCommand) { var properties = command as ICreateOrMergePatchOrDeleteAttribute; var innerProperties = innerCommand as ICreateOrMergePatchOrRemoveAttributeAlias; if (properties == null || innerProperties == null) { return; } if (innerProperties.AttributeId == default(string)) { innerProperties.AttributeId = properties.AttributeId; } else { var outerAttributeIdName = "AttributeId"; var outerAttributeIdValue = properties.AttributeId; var innerAttributeIdName = "AttributeId"; var innerAttributeIdValue = innerProperties.AttributeId; ThrowOnInconsistentIds(innerProperties, innerAttributeIdName, innerAttributeIdValue, outerAttributeIdName, outerAttributeIdValue); } }// END ThrowOnInconsistentCommands /////////////////////
}// END ThrowOnInconsistentCommands ///////////////////// protected virtual IAttributeValueStateEvent Map(IAttributeValueCommand c, IAttributeCommand outerCommand, long version, IAttributeState outerState) { var create = (c.CommandType == CommandType.Create) ? (c as ICreateAttributeValue) : null; if (create != null) { return(MapCreate(create, outerCommand, version, outerState)); } var merge = (c.CommandType == CommandType.MergePatch) ? (c as IMergePatchAttributeValue) : null; if (merge != null) { return(MapMergePatch(merge, outerCommand, version, outerState)); } var remove = (c.CommandType == CommandType.Remove) ? (c as IRemoveAttributeValue) : null; if (remove != null) { return(MapRemove(remove, outerCommand, version)); } throw new NotSupportedException(); }
private static bool IsCommandCreate(IAttributeCommand c) { return(c.Version == AttributeState.VersionZero); }
}// END Map(IMergePatch... //////////////////////////// protected virtual IAttributeValueStateRemoved MapRemove(IRemoveAttributeValue c, IAttributeCommand outerCommand, long version) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new AttributeValueStateEventId(c.AttributeId, c.Value, version); IAttributeValueStateRemoved e = NewAttributeValueStateRemoved(stateEventId); e.CreatedBy = (string)c.RequesterId; e.CreatedAt = DateTime.Now; return(e); }// END Map(IRemove... ////////////////////////////
}// END Map(ICreate... //////////////////////////// protected virtual IAttributeValueStateMergePatched MapMergePatch(IMergePatchAttributeValue c, IAttributeCommand outerCommand, long version, IAttributeState outerState) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new AttributeValueStateEventId(c.AttributeId, c.Value, version); IAttributeValueStateMergePatched e = NewAttributeValueStateMergePatched(stateEventId); var s = outerState.AttributeValues.Get(c.Value); e.Name = c.Name; e.Description = c.Description; e.ReferenceId = c.ReferenceId; e.Active = c.Active; e.IsPropertyNameRemoved = c.IsPropertyNameRemoved; e.IsPropertyDescriptionRemoved = c.IsPropertyDescriptionRemoved; e.IsPropertyReferenceIdRemoved = c.IsPropertyReferenceIdRemoved; e.IsPropertyActiveRemoved = c.IsPropertyActiveRemoved; e.CreatedBy = (string)c.RequesterId; e.CreatedAt = DateTime.Now; return(e); }// END Map(IMergePatch... ////////////////////////////
protected virtual IAttributeValueStateCreated MapCreate(ICreateAttributeValue c, IAttributeCommand outerCommand, long version, IAttributeState outerState) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new AttributeValueStateEventId(c.AttributeId, c.Value, version); IAttributeValueStateCreated e = NewAttributeValueStateCreated(stateEventId); var s = outerState.AttributeValues.Get(c.Value); e.Name = c.Name; e.Description = c.Description; e.ReferenceId = c.ReferenceId; e.Active = c.Active; e.CreatedBy = (string)c.RequesterId; e.CreatedAt = DateTime.Now; return(e); }// END Map(ICreate... ////////////////////////////
}// END Map(IMergePatch... //////////////////////////// protected virtual IAttributeAliasStateRemoved MapRemove(IRemoveAttributeAlias c, IAttributeCommand outerCommand, long version) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new AttributeAliasEventId(c.AttributeId, c.Code, version); IAttributeAliasStateRemoved e = NewAttributeAliasStateRemoved(stateEventId); e.CreatedBy = (string)c.RequesterId; e.CreatedAt = ApplicationContext.Current.TimestampService.Now <DateTime>(); return(e); }// END Map(IRemove... ////////////////////////////
}// END Map(ICreate... //////////////////////////// protected virtual IAttributeAliasStateMergePatched MapMergePatch(IMergePatchAttributeAlias c, IAttributeCommand outerCommand, long version, IAttributeState outerState) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new AttributeAliasEventId(c.AttributeId, c.Code, version); IAttributeAliasStateMergePatched e = NewAttributeAliasStateMergePatched(stateEventId); var s = outerState.Aliases.Get(c.Code); e.Name = c.Name; e.Active = c.Active; e.IsPropertyNameRemoved = c.IsPropertyNameRemoved; e.IsPropertyActiveRemoved = c.IsPropertyActiveRemoved; e.CreatedBy = (string)c.RequesterId; e.CreatedAt = ApplicationContext.Current.TimestampService.Now <DateTime>(); return(e); }// END Map(IMergePatch... ////////////////////////////