Esempio n. 1
0
        private async Task UpdateCore(UpdateAsset update, AssetOperation operation)
        {
            if (!update.DoNotScript)
            {
                await operation.ExecuteUpdateScriptAsync(update);
            }

            Update(update);
        }
Esempio n. 2
0
        private async Task MoveCore(MoveAsset move, AssetOperation operation)
        {
            if (!move.OptimizeValidation)
            {
                await operation.MustMoveToValidFolder(move.ParentId);
            }

            if (!move.DoNotScript)
            {
                await operation.ExecuteMoveScriptAsync(move);
            }

            Move(move);
        }
Esempio n. 3
0
        private async Task AnnotateCore(AnnotateAsset annotate, AssetOperation operation)
        {
            if (!annotate.DoNotScript)
            {
                await operation.ExecuteAnnotateScriptAsync(annotate);
            }

            if (annotate.Tags != null)
            {
                annotate.Tags = await operation.NormalizeTags(annotate.Tags);
            }

            Annotate(annotate);
        }
Esempio n. 4
0
        private async Task DeleteCore(DeleteAsset delete, AssetOperation operation)
        {
            if (delete.CheckReferrers)
            {
                await operation.CheckReferrersAsync();
            }

            if (!delete.DoNotScript)
            {
                await operation.ExecuteDeleteScriptAsync(delete);
            }

            await operation.UnsetTags();

            Delete(delete);
        }
Esempio n. 5
0
        private async Task CreateCore(CreateAsset create, AssetOperation operation)
        {
            if (!create.OptimizeValidation)
            {
                await operation.MustMoveToValidFolder(create.ParentId);
            }

            if (!create.DoNotScript)
            {
                await operation.ExecuteCreateScriptAsync(create);
            }

            if (create.Tags != null)
            {
                create.Tags = await operation.NormalizeTags(create.Tags);
            }

            Create(create);
        }
Esempio n. 6
0
        public override Task <CommandResult> ExecuteAsync(IAggregateCommand command)
        {
            switch (command)
            {
            case UpsertAsset upsert:
                return(UpsertReturnAsync(upsert, async c =>
                {
                    var operation = await AssetOperation.CreateAsync(serviceProvider, c, () => Snapshot);

                    if (Version > EtagVersion.Empty && !IsDeleted(Snapshot))
                    {
                        await UpdateCore(c.AsUpdate(), operation);
                    }
                    else
                    {
                        await CreateCore(c.AsCreate(), operation);
                    }

                    if (Is.OptionalChange(Snapshot.ParentId, c.ParentId))
                    {
                        await MoveCore(c.AsMove(c.ParentId.Value), operation);
                    }

                    return Snapshot;
                }));

            case CreateAsset c:
                return(CreateReturnAsync(c, async create =>
                {
                    var operation = await AssetOperation.CreateAsync(serviceProvider, c, () => Snapshot);

                    await CreateCore(create, operation);

                    if (Is.Change(Snapshot.ParentId, c.ParentId))
                    {
                        await MoveCore(c.AsMove(), operation);
                    }

                    return Snapshot;
                }));

            case AnnotateAsset c:
                return(UpdateReturnAsync(c, async c =>
                {
                    var operation = await AssetOperation.CreateAsync(serviceProvider, c, () => Snapshot);

                    await AnnotateCore(c, operation);

                    return Snapshot;
                }));

            case UpdateAsset update:
                return(UpdateReturnAsync(update, async c =>
                {
                    var operation = await AssetOperation.CreateAsync(serviceProvider, c, () => Snapshot);

                    await UpdateCore(c, operation);

                    return Snapshot;
                }));

            case MoveAsset move:
                return(UpdateReturnAsync(move, async c =>
                {
                    var operation = await AssetOperation.CreateAsync(serviceProvider, c, () => Snapshot);

                    await MoveCore(c, operation);

                    return Snapshot;
                }));

            case DeleteAsset delete when delete.Permanent:
                return(DeletePermanentAsync(delete, async c =>
                {
                    var operation = await AssetOperation.CreateAsync(serviceProvider, c, () => Snapshot);

                    await DeleteCore(c, operation);
                }));

            case DeleteAsset delete:
                return(UpdateAsync(delete, async c =>
                {
                    var operation = await AssetOperation.CreateAsync(serviceProvider, c, () => Snapshot);

                    await DeleteCore(c, operation);
                }));

            default:
                throw new NotSupportedException();
            }
        }