@wepublish/api
Version:
API core for we.publish.
82 lines • 3.08 kB
JavaScript
"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