diff --git a/src/Squidex.Domain.Apps.Read.MongoDb/Contents/Visitors/EdmModelExtensions.cs b/src/Squidex.Domain.Apps.Read.MongoDb/Contents/Visitors/EdmModelExtensions.cs deleted file mode 100644 index 7e8607403..000000000 --- a/src/Squidex.Domain.Apps.Read.MongoDb/Contents/Visitors/EdmModelExtensions.cs +++ /dev/null @@ -1,34 +0,0 @@ -// ========================================================================== -// EdmModelExtensions.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -using System; -using System.Linq; -using Microsoft.OData.Edm; -using Microsoft.OData.UriParser; - -namespace Squidex.Domain.Apps.Read.MongoDb.Contents.Visitors -{ - public static class EdmModelExtensions - { - public static ODataUriParser ParseQuery(this IEdmModel model, string query) - { - query = query ?? string.Empty; - - var path = model.EntityContainer.EntitySets().First().Path.Path.Split('.').Last(); - - if (query.StartsWith("?")) - { - query = query.Substring(1); - } - - var parser = new ODataUriParser(model, new Uri($"{path}?{query}", UriKind.Relative)); - - return parser; - } - } -} diff --git a/src/Squidex/Controllers/ContentApi/ContentSwaggerController.cs b/src/Squidex/Controllers/ContentApi/ContentSwaggerController.cs index 12ff9ef87..553181921 100644 --- a/src/Squidex/Controllers/ContentApi/ContentSwaggerController.cs +++ b/src/Squidex/Controllers/ContentApi/ContentSwaggerController.cs @@ -10,8 +10,8 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using NSwag.Annotations; using Squidex.Controllers.ContentApi.Generator; -using Squidex.Domain.Apps.Read.Apps.Services; using Squidex.Domain.Apps.Read.Schemas.Repositories; +using Squidex.Infrastructure.CQRS.Commands; using Squidex.Pipeline; // ReSharper disable UseObjectOrCollectionInitializer @@ -20,17 +20,14 @@ namespace Squidex.Controllers.ContentApi { [ApiExceptionFilter] [SwaggerIgnore] - public sealed class ContentSwaggerController : Controller + public sealed class ContentSwaggerController : ControllerBase { private readonly ISchemaRepository schemaRepository; - private readonly IAppProvider appProvider; private readonly SchemasSwaggerGenerator schemasSwaggerGenerator; - public ContentSwaggerController(ISchemaRepository schemaRepository, IAppProvider appProvider, - SchemasSwaggerGenerator schemasSwaggerGenerator) + public ContentSwaggerController(ICommandBus commandBus, ISchemaRepository schemaRepository, SchemasSwaggerGenerator schemasSwaggerGenerator) + : base(commandBus) { - this.appProvider = appProvider; - this.schemaRepository = schemaRepository; this.schemasSwaggerGenerator = schemasSwaggerGenerator; } @@ -50,16 +47,9 @@ namespace Squidex.Controllers.ContentApi [ApiCosts(0)] public async Task GetSwagger(string app) { - var appEntity = await appProvider.FindAppByNameAsync(app); - - if (appEntity == null) - { - return NotFound(); - } - - var schemas = await schemaRepository.QueryAllAsync(appEntity.Id); + var schemas = await schemaRepository.QueryAllAsync(App.Id); - var swaggerDocument = await schemasSwaggerGenerator.Generate(appEntity, schemas); + var swaggerDocument = await schemasSwaggerGenerator.Generate(App, schemas); return Content(swaggerDocument.ToJson(), "application/json"); } diff --git a/tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs b/tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs index d8e020ddd..2c917ffd5 100644 --- a/tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs +++ b/tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs @@ -63,10 +63,8 @@ namespace Squidex.Domain.Apps.Read.Contents new GeolocationFieldProperties())); private readonly ISchemaRepository schemaRepository = A.Fake(); - private readonly ISchemaProvider schemas = A.Fake(); private readonly ISchemaEntity schemaEntity = A.Fake(); - private readonly IScriptEngine scriptEngine = A.Fake(); - private readonly IContentRepository contentRepository = A.Fake(); + private readonly IContentQueryService contentQuery = A.Fake(); private readonly IAssetRepository assetRepository = A.Fake(); private readonly IAppEntity appEntity = A.Dummy(); private readonly IMemoryCache cache = new MemoryCache(Options.Create(new MemoryCacheOptions())); @@ -84,17 +82,11 @@ namespace Squidex.Domain.Apps.Read.Contents A.CallTo(() => schemaEntity.IsPublished).Returns(true); A.CallTo(() => schemaEntity.ScriptQuery).Returns(""); - A.CallTo(() => scriptEngine.Transform(A.That.Matches(x => x.User == user), "")) - .ReturnsLazily((ScriptContext c, string s) => c.Data); - - A.CallTo(() => schemas.FindSchemaByIdAsync(A.Ignored, false)) - .Returns(Task.FromResult(schemaEntity)); - var allSchemas = new List { schemaEntity }; A.CallTo(() => schemaRepository.QueryAllAsync(appId)).Returns(Task.FromResult>(allSchemas)); - sut = new CachingGraphQLService(cache, assetRepository, contentRepository, new FakeUrlGenerator(), schemaRepository, schemas, scriptEngine); + sut = new CachingGraphQLService(cache, assetRepository, contentQuery, new FakeUrlGenerator(), schemaRepository); } [Fact] @@ -265,8 +257,8 @@ namespace Squidex.Domain.Apps.Read.Contents var contents = new List { contentEntity }; - A.CallTo(() => contentRepository.QueryAsync(appEntity, schemaId, false, null, "?$top=30&$skip=5")) - .Returns(Task.FromResult>(contents)); + A.CallTo(() => contentQuery.QueryWithCountAsync(appEntity, schemaEntity.Id.ToString(), user, null, "?$top=30&$skip=5")) + .Returns(Task.FromResult((schemaEntity, 0L, (IReadOnlyList)contents))); var result = await sut.QueryAsync(appEntity, user, new GraphQLQuery { Query = query }); @@ -366,8 +358,8 @@ namespace Squidex.Domain.Apps.Read.Contents }} }}"; - A.CallTo(() => contentRepository.FindContentAsync(appEntity, schemaId, contentId)) - .Returns(Task.FromResult(contentEntity)); + A.CallTo(() => contentQuery.FindContentAsync(appEntity, schemaEntity.ToString(), user, contentId)) + .Returns(Task.FromResult((schemaEntity, contentEntity))); var result = await sut.QueryAsync(appEntity, user, new GraphQLQuery { Query = query }); @@ -450,11 +442,11 @@ namespace Squidex.Domain.Apps.Read.Contents var refContents = new List { contentRefEntity }; - A.CallTo(() => contentRepository.FindContentAsync(appEntity, schemaId, contentId)) - .Returns(Task.FromResult(contentEntity)); + A.CallTo(() => contentQuery.FindContentAsync(appEntity, schemaEntity.ToString(), user, contentId)) + .Returns(Task.FromResult((schemaEntity, contentEntity))); - A.CallTo(() => contentRepository.QueryAsync(appEntity, schemaId, false, A>.That.Matches(x => x.Contains(contentRefId)), null)) - .Returns(Task.FromResult>(refContents)); + A.CallTo(() => contentQuery.QueryWithCountAsync(appEntity, schemaEntity.Id.ToString(), user, A>.That.Matches(x => x.Contains(contentRefId)), null)) + .Returns(Task.FromResult((schemaEntity, 0L, (IReadOnlyList)refContents))); var result = await sut.QueryAsync(appEntity, user, new GraphQLQuery { Query = query }); @@ -510,8 +502,8 @@ namespace Squidex.Domain.Apps.Read.Contents var refAssets = new List { assetRefEntity }; - A.CallTo(() => contentRepository.FindContentAsync(appEntity, schemaId, contentId)) - .Returns(Task.FromResult(contentEntity)); + A.CallTo(() => contentQuery.FindContentAsync(appEntity, schemaEntity.ToString(), user, contentId)) + .Returns(Task.FromResult((schemaEntity, contentEntity))); A.CallTo(() => assetRepository.QueryAsync(appEntity.Id, null, A>.That.Matches(x => x.Contains(assetRefId)), null, int.MaxValue, 0)) .Returns(Task.FromResult>(refAssets)); @@ -569,8 +561,8 @@ namespace Squidex.Domain.Apps.Read.Contents }} }}"; - A.CallTo(() => contentRepository.FindContentAsync(appEntity, schemaId, contentId)) - .Returns(Task.FromResult(contentEntity)); + A.CallTo(() => contentQuery.FindContentAsync(appEntity, schemaEntity.ToString(), user, contentId)) + .Returns(Task.FromResult((schemaEntity, contentEntity))); var result = await sut.QueryAsync(appEntity, user, new GraphQLQuery { Query = query });