@wepublish/api
Version:
API core for we.publish.
269 lines • 8.49 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getArticles = exports.createArticleFilter = exports.createArticleOrder = void 0;
const tslib_1 = require("tslib");
const api_1 = require("../../../../utils-api/src");
const article_1 = require("../../db/article");
const utils_1 = require("../utils");
const createArticleOrder = (field, sortOrder) => {
switch (field) {
case article_1.ArticleSort.CreatedAt:
return {
createdAt: (0, api_1.graphQLSortOrderToPrisma)(sortOrder)
};
case article_1.ArticleSort.ModifiedAt:
return {
modifiedAt: (0, api_1.graphQLSortOrderToPrisma)(sortOrder)
};
case article_1.ArticleSort.PublishedAt:
return {
published: {
publishedAt: (0, api_1.graphQLSortOrderToPrisma)(sortOrder)
}
};
case article_1.ArticleSort.UpdatedAt:
return {
published: {
updatedAt: (0, api_1.graphQLSortOrderToPrisma)(sortOrder)
}
};
case article_1.ArticleSort.PublishAt:
return {
pending: {
publishAt: (0, api_1.graphQLSortOrderToPrisma)(sortOrder)
}
};
}
};
exports.createArticleOrder = createArticleOrder;
const createTitleFilter = (filter) => {
if (filter === null || filter === void 0 ? void 0 : filter.title) {
const containsTitle = {
title: {
contains: filter.title,
mode: 'insensitive'
}
};
return {
OR: [{ draft: containsTitle }, { pending: containsTitle }, { published: containsTitle }]
};
}
return {};
};
const createPreTitleFilter = (filter) => {
if (filter === null || filter === void 0 ? void 0 : filter.preTitle) {
const containsPreTitle = {
preTitle: {
contains: filter.preTitle,
mode: 'insensitive'
}
};
return {
OR: [{ draft: containsPreTitle }, { pending: containsPreTitle }, { published: containsPreTitle }]
};
}
return {};
};
const createLeadFilter = (filter) => {
if (filter === null || filter === void 0 ? void 0 : filter.lead) {
const containsLead = {
lead: {
contains: filter.lead,
mode: 'insensitive'
}
};
return {
OR: [{ draft: containsLead }, { pending: containsLead }, { published: containsLead }]
};
}
return {};
};
const createPublicationDateFromFilter = (filter) => {
if (filter === null || filter === void 0 ? void 0 : filter.publicationDateFrom) {
const { comparison, date } = filter.publicationDateFrom;
const compare = (0, utils_1.mapDateFilterToPrisma)(comparison);
const filterBy = {
publishedAt: {
[compare]: date
}
};
return {
AND: [{ published: filterBy }]
};
}
return {};
};
const createPublicationDateToFilter = (filter) => {
if (filter === null || filter === void 0 ? void 0 : filter.publicationDateTo) {
const { comparison, date } = filter.publicationDateTo;
const compare = (0, utils_1.mapDateFilterToPrisma)(comparison);
const filterBy = {
publishedAt: {
[compare]: date
}
};
return {
AND: [{ published: filterBy }]
};
}
return {};
};
const createPublishedFilter = (filter) => {
if ((filter === null || filter === void 0 ? void 0 : filter.published) != null) {
return {
publishedId: filter.published
? {
not: null
}
: null
};
}
return {};
};
const createDraftFilter = (filter) => {
if ((filter === null || filter === void 0 ? void 0 : filter.draft) != null) {
return {
draftId: filter.draft
? {
not: null
}
: null
};
}
return {};
};
const createPendingFilter = (filter) => {
if ((filter === null || filter === void 0 ? void 0 : filter.pending) != null) {
return {
pendingId: filter.pending
? {
not: null
}
: null
};
}
return {};
};
const createSharedFilter = (filter) => {
if ((filter === null || filter === void 0 ? void 0 : filter.shared) != null) {
return {
shared: filter.shared
};
}
return {};
};
const createTagsFilter = (filter) => {
var _a;
if ((_a = filter === null || filter === void 0 ? void 0 : filter.tags) === null || _a === void 0 ? void 0 : _a.length) {
const hasTags = {
is: {
tags: { hasSome: filter.tags }
}
};
return {
OR: [{ draft: hasTags }, { pending: hasTags }, { published: hasTags }]
};
}
return {};
};
const createAuthorFilter = (filter) => {
if (filter === null || filter === void 0 ? void 0 : filter.authors) {
const hasAuthors = {
is: {
authors: {
some: {
authorId: {
in: filter.authors
}
}
}
}
};
return {
OR: [{ draft: hasAuthors }, { pending: hasAuthors }, { published: hasAuthors }]
};
}
return {};
};
const createHiddenFilter = (filter) => {
if (filter === null || filter === void 0 ? void 0 : filter.includeHidden) {
return {};
}
return {
hidden: false
};
};
const createArticleFilter = (filter) => ({
AND: [
createTitleFilter(filter),
createPreTitleFilter(filter),
createPublicationDateFromFilter(filter),
createPublicationDateToFilter(filter),
createLeadFilter(filter),
createSharedFilter(filter),
createTagsFilter(filter),
createAuthorFilter(filter),
createHiddenFilter(filter),
{
OR: [createPublishedFilter(filter), createDraftFilter(filter), createPendingFilter(filter)]
}
]
});
exports.createArticleFilter = createArticleFilter;
const getArticles = (filter, sortedField, order, cursorId, skip, take, article) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
const orderBy = (0, exports.createArticleOrder)(sortedField, order);
const where = (0, exports.createArticleFilter)(filter);
const [totalCount, articles] = yield Promise.all([
article.count({
where,
orderBy
}),
article.findMany({
where,
skip,
take: (0, api_1.getMaxTake)(take) + 1,
orderBy,
cursor: cursorId ? { id: cursorId } : undefined,
include: {
draft: {
include: {
properties: true,
authors: true,
socialMediaAuthors: true
}
},
pending: {
include: {
properties: true,
authors: true,
socialMediaAuthors: true
}
},
published: {
include: {
properties: true,
authors: true,
socialMediaAuthors: true
}
}
}
})
]);
const nodes = articles.slice(0, take);
const firstArticle = nodes[0];
const lastArticle = nodes[nodes.length - 1];
const hasPreviousPage = Boolean(skip);
const hasNextPage = articles.length > nodes.length;
return {
nodes,
totalCount,
pageInfo: {
hasPreviousPage,
hasNextPage,
startCursor: firstArticle === null || firstArticle === void 0 ? void 0 : firstArticle.id,
endCursor: lastArticle === null || lastArticle === void 0 ? void 0 : lastArticle.id
}
};
});
exports.getArticles = getArticles;
//# sourceMappingURL=article.queries.js.map