示例#1
0
        public async Task <IResultList <IContentEntity> > QueryAsync(ContentQueryContext context, Q query)
        {
            Guard.NotNull(context, nameof(context));

            var schema = await GetSchemaAsync(context);

            CheckPermission(schema, context.Base.User);

            using (Profiler.TraceMethod <ContentQueryService>())
            {
                var status = GetQueryStatus(context.Base);

                IResultList <IContentEntity> contents;

                if (query.Ids?.Count > 0)
                {
                    contents = await contentRepository.QueryAsync(context.Base.App, schema, status, new HashSet <Guid>(query.Ids));

                    contents = Sort(contents, query.Ids);
                }
                else
                {
                    var parsedQuery = ParseQuery(context.Base, query.ODataQuery, schema);

                    contents = await contentRepository.QueryAsync(context.Base.App, schema, status, parsedQuery);
                }

                return(Transform(context.Base, schema, true, contents));
            }
        }
示例#2
0
        public async Task <IContentEntity> FindContentAsync(ContentQueryContext context, Guid id, long version = -1)
        {
            Guard.NotNull(context, nameof(context));

            var schema = await GetSchemaAsync(context);

            using (Profiler.TraceMethod <ContentQueryService>())
            {
                var isVersioned = version > EtagVersion.Empty;

                var status = GetFindStatus(context.Base);

                var content =
                    isVersioned ?
                    await FindContentByVersionAsync(id, version) :
                    await FindContentAsync(context.Base, id, status, schema);

                if (content == null || (content.Status != Status.Published && !context.Base.IsFrontendClient) || content.SchemaId.Id != schema.Id)
                {
                    throw new DomainObjectNotFoundException(id.ToString(), typeof(ISchemaEntity));
                }

                return(Transform(context.Base, schema, true, content));
            }
        }
示例#3
0
        public ContentQueryServiceTests()
        {
            user = new ClaimsPrincipal(identity);

            A.CallTo(() => app.Id).Returns(appId);
            A.CallTo(() => app.Name).Returns(appName);
            A.CallTo(() => app.LanguagesConfig).Returns(LanguagesConfig.English);

            A.CallTo(() => schema.SchemaDef).Returns(new Schema("my-schema"));

            context = new ContentQueryContext(QueryContext.Create(app, user));

            sut = new ContentQueryService(contentRepository, contentVersionLoader, appProvider, scriptEngine, modelBuilder);
        }
        public ContentQueryServiceTests()
        {
            user = new ClaimsPrincipal(identity);

            A.CallTo(() => app.Id).Returns(appId);
            A.CallTo(() => app.Name).Returns(appName);
            A.CallTo(() => app.LanguagesConfig).Returns(LanguagesConfig.English);

            A.CallTo(() => schema.AppId).Returns(new NamedId <Guid>(appId, appName));
            A.CallTo(() => schema.Id).Returns(schemaId);
            A.CallTo(() => schema.Name).Returns(schemaName);
            A.CallTo(() => schema.SchemaDef).Returns(new Schema(schemaName));
            A.CallTo(() => schema.ScriptQuery).Returns(script);

            context = new ContentQueryContext(QueryContext.Create(app, user));

            sut = new ContentQueryService(appProvider, contentRepository, contentVersionLoader, scriptEngine, Options.Create(new ContentOptions()), modelBuilder);
        }
示例#5
0
        public async Task <ISchemaEntity> GetSchemaAsync(ContentQueryContext context)
        {
            ISchemaEntity schema = null;

            if (Guid.TryParse(context.SchemaIdOrName, out var id))
            {
                schema = await appProvider.GetSchemaAsync(context.Base.App.Id, id);
            }

            if (schema == null)
            {
                schema = await appProvider.GetSchemaAsync(context.Base.App.Id, context.SchemaIdOrName);
            }

            if (schema == null)
            {
                throw new DomainObjectNotFoundException(context.SchemaIdOrName, typeof(ISchemaEntity));
            }

            return(schema);
        }
示例#6
0
 public Task ThrowIfSchemaNotExistsAsync(ContentQueryContext context)
 {
     return(GetSchemaAsync(context));
 }