示例#1
0
        private void DeleteByIdCmd(DeleteById cmd)
        {
            // verify id valid
            if (!State.IdNotDeleted(cmd.Id))
            {
                if (State.IdDeleted(cmd.Id))
                {
                    Sender.Tell(new DeleteById_IdAlreadyDeleted());
                }
                else
                {
                    Sender.Tell(new DeleteById_IdNotFound());
                }

                return;
            }

            IActorRef entityActor = ActorRefs.Nobody;

            if (State.IdsActive.Contains(cmd.Id))
            {
                entityActor = Context.Child(cmd.Id);
                if (entityActor == ActorRefs.Nobody)
                {
                    entityActor = CreateEntity(cmd.Id);
                }
            }

            // if inactive, activate
            if (entityActor == ActorRefs.Nobody && State.IdsInactive.Contains(cmd.Id))
            {
                entityActor = CreateEntity(cmd.Id);
                State.ActivateId(cmd.Id);
            }

            // delete record
            var deletedId = new DeletedId(cmd.Id);

            PersistAndTrack(deletedId, result =>
            {
                DeletedIdEvnt(result);
                entityActor.Forward(cmd);
            });
        }
示例#2
0
 private void DeletedIdEvnt(DeletedId evnt)
 {
     State.DeleteId(evnt.Id);
 }