@wepublish/api
Version:
API core for we.publish.
214 lines • 6.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPages = exports.createPageFilter = exports.createPageOrder = void 0;
const tslib_1 = require("tslib");
const page_1 = require("../../db/page");
const api_1 = require("../../../../utils-api/src");
const utils_1 = require("../utils");
const createPageOrder = (field, sortOrder) => {
switch (field) {
case page_1.PageSort.CreatedAt:
return {
createdAt: (0, api_1.graphQLSortOrderToPrisma)(sortOrder)
};
case page_1.PageSort.ModifiedAt:
return {
modifiedAt: (0, api_1.graphQLSortOrderToPrisma)(sortOrder)
};
case page_1.PageSort.PublishedAt:
return {
published: {
publishedAt: (0, api_1.graphQLSortOrderToPrisma)(sortOrder)
}
};
case page_1.PageSort.UpdatedAt:
return {
published: {
updatedAt: (0, api_1.graphQLSortOrderToPrisma)(sortOrder)
}
};
case page_1.PageSort.PublishAt:
return {
pending: {
publishAt: (0, api_1.graphQLSortOrderToPrisma)(sortOrder)
}
};
}
};
exports.createPageOrder = createPageOrder;
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 createDescriptionFilter = (filter) => {
if (filter === null || filter === void 0 ? void 0 : filter.description) {
const containsDescription = {
description: {
contains: filter.description,
mode: 'insensitive'
}
};
return {
OR: [
{ draft: containsDescription },
{ pending: containsDescription },
{ published: containsDescription }
]
};
}
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 {
published: filter.published
? {
isNot: null
}
: null
};
}
return {};
};
const createDraftFilter = (filter) => {
if ((filter === null || filter === void 0 ? void 0 : filter.draft) != null) {
return {
draft: filter.draft
? {
isNot: null
}
: null
};
}
return {};
};
const createPendingFilter = (filter) => {
if ((filter === null || filter === void 0 ? void 0 : filter.pending) != null) {
return {
pending: filter.pending
? {
isNot: null
}
: null
};
}
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 createPageFilter = (filter) => ({
AND: [
createTitleFilter(filter),
createPublicationDateFromFilter(filter),
createPublicationDateToFilter(filter),
createDescriptionFilter(filter),
createPublishedFilter(filter),
createDraftFilter(filter),
createPendingFilter(filter),
createTagsFilter(filter)
]
});
exports.createPageFilter = createPageFilter;
const getPages = (filter, sortedField, order, cursorId, skip, take, page) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
const orderBy = (0, exports.createPageOrder)(sortedField, order);
const where = (0, exports.createPageFilter)(filter);
const [totalCount, pages] = yield Promise.all([
page.count({
where,
orderBy
}),
page.findMany({
where,
skip,
take: (0, api_1.getMaxTake)(take) + 1,
orderBy,
cursor: cursorId ? { id: cursorId } : undefined,
include: {
draft: {
include: {
properties: true
}
},
pending: {
include: {
properties: true
}
},
published: {
include: {
properties: true
}
}
}
})
]);
const nodes = pages.slice(0, take);
const firstPage = nodes[0];
const lastPage = nodes[nodes.length - 1];
const hasPreviousPage = Boolean(skip);
const hasNextPage = pages.length > nodes.length;
return {
nodes,
totalCount,
pageInfo: {
hasPreviousPage,
hasNextPage,
startCursor: firstPage === null || firstPage === void 0 ? void 0 : firstPage.id,
endCursor: lastPage === null || lastPage === void 0 ? void 0 : lastPage.id
}
};
});
exports.getPages = getPages;
//# sourceMappingURL=page.queries.js.map