protected bool IsRepeatedCommand(IAttributeSetInstanceExtensionFieldGroupCommand command, IEventStoreAggregateId eventStoreAggregateId, IAttributeSetInstanceExtensionFieldGroupState state) { bool repeated = false; if (((IAttributeSetInstanceExtensionFieldGroupStateProperties)state).Version > command.AggregateVersion) { var lastEvent = EventStore.FindLastEvent(typeof(IAttributeSetInstanceExtensionFieldGroupStateEvent), eventStoreAggregateId, command.AggregateVersion); if (lastEvent != null && lastEvent.CommandId == command.CommandId) { repeated = true; } } return(repeated); }
protected void ThrowOnInconsistentCommands(IAttributeSetInstanceExtensionFieldGroupCommand command, IAttributeSetInstanceExtensionFieldCommand innerCommand) { var properties = command as ICreateOrMergePatchOrDeleteAttributeSetInstanceExtensionFieldGroup; var innerProperties = innerCommand as ICreateOrMergePatchOrRemoveAttributeSetInstanceExtensionField; if (properties == null || innerProperties == null) { return; } var outerIdName = "Id"; var outerIdValue = properties.Id; var innerGroupIdName = "GroupId"; var innerGroupIdValue = innerProperties.GroupId; SetNullInnerIdOrThrowOnInconsistentIds(innerProperties, innerGroupIdName, innerGroupIdValue, outerIdName, outerIdValue); }// END ThrowOnInconsistentCommands /////////////////////
protected virtual void Update(IAttributeSetInstanceExtensionFieldGroupCommand c, Action <IAttributeSetInstanceExtensionFieldGroupAggregate> action) { var aggregateId = c.AggregateId; var state = StateRepository.Get(aggregateId, false); var aggregate = GetAttributeSetInstanceExtensionFieldGroupAggregate(state); var eventStoreAggregateId = ToEventStoreAggregateId(aggregateId); var repeated = IsRepeatedCommand(c, eventStoreAggregateId, state); if (repeated) { return; } aggregate.ThrowOnInvalidStateTransition(c); action(aggregate); EventStore.AppendEvents(eventStoreAggregateId, ((IAttributeSetInstanceExtensionFieldGroupStateProperties)state).Version, aggregate.Changes, () => { StateRepository.Save(state); }); }
protected virtual void Update(IAttributeSetInstanceExtensionFieldGroupCommand c, Action <IAttributeSetInstanceExtensionFieldGroupAggregate> action) { var aggregateId = c.AggregateId; var state = StateRepository.Get(aggregateId, false); var aggregate = GetAttributeSetInstanceExtensionFieldGroupAggregate(state); var eventStoreAggregateId = ToEventStoreAggregateId(aggregateId); var repeated = IsRepeatedCommand(c, eventStoreAggregateId, state); if (repeated) { return; } aggregate.ThrowOnInvalidStateTransition(c); action(aggregate); Persist(eventStoreAggregateId, aggregate, state); }
private static bool IsCommandCreate(IAttributeSetInstanceExtensionFieldGroupCommand c) { return(c.Version == AttributeSetInstanceExtensionFieldGroupState.VersionZero); }
}// END Map(IMergePatch... //////////////////////////// protected virtual IAttributeSetInstanceExtensionFieldStateRemoved MapRemove(IRemoveAttributeSetInstanceExtensionField c, IAttributeSetInstanceExtensionFieldGroupCommand outerCommand, long version) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new AttributeSetInstanceExtensionFieldStateEventId(c.GroupId, c.Index, version); IAttributeSetInstanceExtensionFieldStateRemoved e = NewAttributeSetInstanceExtensionFieldStateRemoved(stateEventId); e.CreatedBy = (string)c.RequesterId; e.CreatedAt = DateTime.Now; return(e); }// END Map(IRemove... ////////////////////////////
}// END Map(ICreate... //////////////////////////// protected virtual IAttributeSetInstanceExtensionFieldStateMergePatched MapMergePatch(IMergePatchAttributeSetInstanceExtensionField c, IAttributeSetInstanceExtensionFieldGroupCommand outerCommand, long version, IAttributeSetInstanceExtensionFieldGroupState outerState) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new AttributeSetInstanceExtensionFieldStateEventId(c.GroupId, c.Index, version); IAttributeSetInstanceExtensionFieldStateMergePatched e = NewAttributeSetInstanceExtensionFieldStateMergePatched(stateEventId); var s = outerState.Fields.Get(c.Index); e.Name = c.Name; e.Type = c.Type; e.Length = c.Length; e.Alias = c.Alias; e.Description = c.Description; e.Active = c.Active; e.IsPropertyNameRemoved = c.IsPropertyNameRemoved; e.IsPropertyTypeRemoved = c.IsPropertyTypeRemoved; e.IsPropertyLengthRemoved = c.IsPropertyLengthRemoved; e.IsPropertyAliasRemoved = c.IsPropertyAliasRemoved; e.IsPropertyDescriptionRemoved = c.IsPropertyDescriptionRemoved; e.IsPropertyActiveRemoved = c.IsPropertyActiveRemoved; e.CreatedBy = (string)c.RequesterId; e.CreatedAt = DateTime.Now; return(e); }// END Map(IMergePatch... ////////////////////////////
}// END ThrowOnInconsistentCommands ///////////////////// protected virtual IAttributeSetInstanceExtensionFieldStateEvent Map(IAttributeSetInstanceExtensionFieldCommand c, IAttributeSetInstanceExtensionFieldGroupCommand outerCommand, long version, IAttributeSetInstanceExtensionFieldGroupState outerState) { var create = (c.CommandType == CommandType.Create) ? (c as ICreateAttributeSetInstanceExtensionField) : null; if (create != null) { return(MapCreate(create, outerCommand, version, outerState)); } var merge = (c.CommandType == CommandType.MergePatch) ? (c as IMergePatchAttributeSetInstanceExtensionField) : null; if (merge != null) { return(MapMergePatch(merge, outerCommand, version, outerState)); } var remove = (c.CommandType == CommandType.Remove) ? (c as IRemoveAttributeSetInstanceExtensionField) : null; if (remove != null) { return(MapRemove(remove, outerCommand, version)); } throw new NotSupportedException(); }
protected virtual IAttributeSetInstanceExtensionFieldStateCreated MapCreate(ICreateAttributeSetInstanceExtensionField c, IAttributeSetInstanceExtensionFieldGroupCommand outerCommand, long version, IAttributeSetInstanceExtensionFieldGroupState outerState) { c.RequesterId = outerCommand.RequesterId; var stateEventId = new AttributeSetInstanceExtensionFieldStateEventId(c.GroupId, c.Index, version); IAttributeSetInstanceExtensionFieldStateCreated e = NewAttributeSetInstanceExtensionFieldStateCreated(stateEventId); var s = outerState.Fields.Get(c.Index, true); e.Name = c.Name; e.Type = c.Type; e.Length = c.Length; e.Alias = c.Alias; e.Description = c.Description; e.Active = c.Active; e.CreatedBy = (string)c.RequesterId; e.CreatedAt = DateTime.Now; return(e); }// END Map(ICreate... ////////////////////////////