public override Task <object?> ExecuteAsync(IAggregateCommand command)
        {
            VerifyNotDeleted();
            VerifyCommand(command);

            switch (command)
            {
            case CreateAssetFolder createAssetFolder:
                return(CreateReturnAsync(createAssetFolder, async c =>
                {
                    await GuardAssetFolder.CanCreate(c, assetQuery);

                    Create(c);

                    return Snapshot;
                }));

            case MoveAssetFolder moveAssetFolder:
                return(UpdateReturnAsync(moveAssetFolder, async c =>
                {
                    await GuardAssetFolder.CanMove(c, assetQuery, Snapshot.Id, Snapshot.ParentId);

                    Move(c);

                    return Snapshot;
                }));

            case RenameAssetFolder renameAssetFolder:
                return(UpdateReturn(renameAssetFolder, c =>
                {
                    GuardAssetFolder.CanRename(c);

                    Rename(c);

                    return Snapshot;
                }));

            case DeleteAssetFolder deleteAssetFolder:
                return(Update(deleteAssetFolder, c =>
                {
                    GuardAssetFolder.CanDelete(c);

                    Delete(c);
                }));

            default:
                throw new NotSupportedException();
            }
        }
        public override Task <CommandResult> ExecuteAsync(IAggregateCommand command)
        {
            switch (command)
            {
            case CreateAssetFolder c:
                return(CreateReturnAsync(c, async create =>
                {
                    await GuardAssetFolder.CanCreate(create, assetQuery);

                    Create(create);

                    return Snapshot;
                }));

            case MoveAssetFolder move:
                return(UpdateReturnAsync(move, async c =>
                {
                    await GuardAssetFolder.CanMove(c, Snapshot, assetQuery);

                    Move(c);

                    return Snapshot;
                }));

            case RenameAssetFolder rename:
                return(UpdateReturn(rename, c =>
                {
                    GuardAssetFolder.CanRename(c);

                    Rename(c);

                    return Snapshot;
                }));

            case DeleteAssetFolder delete:
                return(Update(delete, c =>
                {
                    GuardAssetFolder.CanDelete(c);

                    Delete(c);
                }));

            default:
                throw new NotSupportedException();
            }
        }