UNPKG

@wepublish/api

Version:
82 lines 3.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.queryPhrase = void 0; const tslib_1 = require("tslib"); const article_1 = require("../../db/article"); const page_1 = require("../../db/page"); const page_queries_1 = require("../page/page.queries"); const article_queries_1 = require("../article/article.queries"); const queryPhrase = (query, prisma, publicArticlesLoader, publicPagesLoader, take, skip, pageSort, articleSort, order) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { // Default add & if no specific query is given to prevent search to fail! query = query.replace(' ', '&'); const [foundArticleIds, foundPageIds] = yield Promise.all([ prisma.$queryRaw ` SELECT a.id FROM articles a JOIN public."articles.revisions" ar on a."publishedId" = ar.id WHERE to_tsvector('english', ar.title) || jsonb_to_tsvector( 'english', jsonb_path_query_array(ar.blocks, 'strict $.**.text'), '["string"]' )@@ to_tsquery('english', ${query}) LIMIT ${take} OFFSET ${skip}; `, prisma.$queryRaw ` SELECT p.id FROM pages p JOIN public."pages.revisions" pr on p."publishedId" = pr.id WHERE to_tsvector('english', pr.title) || jsonb_to_tsvector( 'english', jsonb_path_query_array(blocks, 'strict $.**.text'), '["string"]' )@@ to_tsquery('english', ${query}) LIMIT ${take} OFFSET ${skip}; ` ]); const articleIds = foundArticleIds.map(({ id }) => id); const pageIds = foundPageIds.map(({ id }) => id); const [articles, pages] = yield Promise.all([ prisma.article.findMany({ where: { id: { in: articleIds } }, include: { published: { include: { properties: true, authors: true, socialMediaAuthors: true } } }, orderBy: (0, article_queries_1.createArticleOrder)(articleSort, order) }), prisma.page.findMany({ where: { id: { in: pageIds } }, include: { published: { include: { properties: true } } }, orderBy: (0, page_queries_1.createPageOrder)(pageSort, order) }) ]); const publicArticles = articles.map(article_1.articleWithRevisionsToPublicArticle); publicArticles.forEach(article => publicArticlesLoader.prime(article.id, article)); const publicPages = pages.map(page_1.pageWithRevisionsToPublicPage); publicPages.forEach(page => publicPagesLoader.prime(page.id, page)); return { articles: publicArticles, pages: publicPages }; }); exports.queryPhrase = queryPhrase; //# sourceMappingURL=phrase.public-queries.js.map