UNPKG

@wepublish/api

Version:
214 lines 6.69 kB
"use strict"; 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