@wepublish/api
Version:
API core for we.publish.
94 lines • 3.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPolls = exports.createPollFilter = exports.createPollOrder = exports.PollSort = void 0;
const tslib_1 = require("tslib");
const api_1 = require("../../../../permissions-api/src");
const api_2 = require("../../../../utils-api/src");
const permissions_1 = require("../permissions");
var PollSort;
(function (PollSort) {
PollSort["CreatedAt"] = "CreatedAt";
PollSort["ModifiedAt"] = "ModifiedAt";
PollSort["OpensAt"] = "OpensAt";
})(PollSort || (exports.PollSort = PollSort = {}));
const createPollOrder = (field, sortOrder) => {
switch (field) {
case PollSort.ModifiedAt:
return {
modifiedAt: (0, api_2.graphQLSortOrderToPrisma)(sortOrder)
};
case PollSort.CreatedAt:
return {
createdAt: (0, api_2.graphQLSortOrderToPrisma)(sortOrder)
};
case PollSort.OpensAt:
default:
return {
opensAt: (0, api_2.graphQLSortOrderToPrisma)(sortOrder)
};
}
};
exports.createPollOrder = createPollOrder;
const createOpenOnlyFilter = (filter) => {
if (filter === null || filter === void 0 ? void 0 : filter.openOnly) {
return {
opensAt: {
lte: new Date()
},
OR: [
{
closedAt: null
},
{
closedAt: {
gte: new Date()
}
}
]
};
}
return {};
};
const createPollFilter = (filter) => ({
AND: [createOpenOnlyFilter(filter)]
});
exports.createPollFilter = createPollFilter;
const getPolls = (filter, sortedField, order, cursorId, skip, take, authenticate, poll) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
const { roles } = authenticate();
(0, permissions_1.authorise)(api_1.CanGetPoll, roles);
const orderBy = (0, exports.createPollOrder)(sortedField, order);
const where = (0, exports.createPollFilter)(filter);
const [totalCount, polls] = yield Promise.all([
poll.count({
where,
orderBy
}),
poll.findMany({
where,
skip,
take: (0, api_2.getMaxTake)(take) + 1,
orderBy,
cursor: cursorId ? { id: cursorId } : undefined,
include: {
answers: true
}
})
]);
const nodes = polls.slice(0, take);
const firstPoll = nodes[0];
const lastPoll = nodes[nodes.length - 1];
const hasPreviousPage = Boolean(skip);
const hasNextPage = polls.length > nodes.length;
return {
nodes,
totalCount,
pageInfo: {
hasPreviousPage,
hasNextPage,
startCursor: firstPoll === null || firstPoll === void 0 ? void 0 : firstPoll.id,
endCursor: lastPoll === null || lastPoll === void 0 ? void 0 : lastPoll.id
}
};
});
exports.getPolls = getPolls;
//# sourceMappingURL=poll.private-queries.js.map