private (TemplateVars, IAssetEntity) SetupAssetVars(int fileSize = 100)
        {
            var assetId = DomainId.NewGuid();
            var asset   = CreateAsset(assetId, 1, fileSize);

            var @event = new EnrichedContentEvent
            {
                Data =
                    new ContentData()
                    .AddField("assets",
                              new ContentFieldData()
                              .AddInvariant(JsonValue.Array(assetId))),
                AppId = appId
            };

            A.CallTo(() => assetQuery.FindAsync(A <Context> ._, assetId, EtagVersion.Any, A <CancellationToken> ._))
            .Returns(asset);

            SetupText(@event.Id, Encoding.UTF8.GetBytes("Hello Asset"));

            var vars = new TemplateVars
            {
                ["event"] = @event
            };

            return(vars, asset);
        }
Exemplo n.º 2
0
        public async Task <IActionResult> GetAssetContentBySlug(string app, string idOrSlug, [FromQuery] AssetContentQueryDto queries, string?more = null)
        {
            var requestContext = Context.Clone(b => b.WithoutAssetEnrichment());

            var asset = await assetQuery.FindAsync(requestContext, DomainId.Create(idOrSlug));

            if (asset == null)
            {
                asset = await assetQuery.FindBySlugAsync(requestContext, idOrSlug);
            }

            return(await DeliverAssetAsync(requestContext, asset, queries));
        }
Exemplo n.º 3
0
        public async Task <IActionResult> GetAssetContentBySlug(string app, string idOrSlug, AssetContentQueryDto request, string?more = null)
        {
            var requestContext = Context.Clone(b => b.WithoutAssetEnrichment());

            var asset = await assetQuery.FindAsync(requestContext, DomainId.Create(idOrSlug), ct : HttpContext.RequestAborted);

            if (asset == null)
            {
                asset = await assetQuery.FindBySlugAsync(requestContext, idOrSlug, HttpContext.RequestAborted);
            }

            return(await DeliverAssetAsync(requestContext, asset, request));
        }
Exemplo n.º 4
0
        public virtual async Task <IEnrichedAssetEntity?> FindAssetAsync(DomainId id)
        {
            var asset = cachedAssets.GetOrDefault(id);

            if (asset == null)
            {
                await maxRequests.WaitAsync();

                try
                {
                    asset = await assetQuery.FindAsync(context, id);
                }
                finally
                {
                    maxRequests.Release();
                }

                if (asset != null)
                {
                    cachedAssets[asset.Id] = asset;
                }
            }

            return(asset);
        }
Exemplo n.º 5
0
        public async Task Should_resolve_assets_in_loop()
        {
            var assetId1 = DomainId.NewGuid();
            var asset1   = CreateAsset(assetId1, 1);
            var assetId2 = DomainId.NewGuid();
            var asset2   = CreateAsset(assetId2, 2);

            var @event = new EnrichedContentEvent
            {
                Data =
                    new ContentData()
                    .AddField("assets",
                              new ContentFieldData()
                              .AddInvariant(JsonValue.Array(assetId1, assetId2))),
                AppId = appId
            };

            A.CallTo(() => assetQuery.FindAsync(A <Context> ._, assetId1, EtagVersion.Any, A <CancellationToken> ._))
            .Returns(asset1);

            A.CallTo(() => assetQuery.FindAsync(A <Context> ._, assetId2, EtagVersion.Any, A <CancellationToken> ._))
            .Returns(asset2);

            var vars = new TemplateVars
            {
                ["event"] = @event
            };

            var template = @"
                {% for id in event.data.assets.iv %}
                    {% asset 'ref', id %}
                    Text: {{ ref.fileName }} {{ ref.id }}
                {% endfor %}
                ";

            var expected = $@"
                Text: file1.jpg {assetId1}
                Text: file2.jpg {assetId2}
            ";

            var result = await sut.RenderAsync(template, vars);

            Assert.Equal(Cleanup(expected), Cleanup(result));
        }
Exemplo n.º 6
0
        public async Task <IActionResult> GetAsset(string app, DomainId id)
        {
            var asset = await assetQuery.FindAsync(Context, id, ct : HttpContext.RequestAborted);

            if (asset == null)
            {
                return(NotFound());
            }

            var response = Deferred.Response(() =>
            {
                return(AssetDto.FromAsset(asset, Resources));
            });

            return(Ok(response));
        }
Exemplo n.º 7
0
        private static async Task <IAssetEntity?> ResolveAssetAsync(IAppProvider appProvider, IAssetQueryService assetQuery, DomainId appId, FluidValue id)
        {
            var app = await appProvider.GetAppAsync(appId);

            if (app == null)
            {
                return(null);
            }

            var domainId = DomainId.Create(id.ToStringValue());

            var requestContext =
                Context.Admin(app).Clone(b => b
                                         .WithoutTotal());

            var asset = await assetQuery.FindAsync(requestContext, domainId);

            return(asset);
        }