@wepublish/api
Version:
API core for we.publish.
200 lines • 5.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getImportedEventsIds = exports.getEvents = exports.createEventFilter = exports.createEventOrder = exports.EventSort = exports.getEvent = void 0;
const tslib_1 = require("tslib");
const api_1 = require("../../../../utils-api/src");
const getEvent = (id, event) => {
return event.findUnique({
where: { id }
});
};
exports.getEvent = getEvent;
var EventSort;
(function (EventSort) {
EventSort["CreatedAt"] = "CreatedAt";
EventSort["ModifiedAt"] = "ModifiedAt";
EventSort["StartsAt"] = "StartsAt";
EventSort["EndsAt"] = "EndsAt";
})(EventSort || (exports.EventSort = EventSort = {}));
const createEventOrder = (field, sortOrder) => {
switch (field) {
case EventSort.ModifiedAt:
return {
modifiedAt: (0, api_1.graphQLSortOrderToPrisma)(sortOrder)
};
case EventSort.CreatedAt:
return {
createdAt: (0, api_1.graphQLSortOrderToPrisma)(sortOrder)
};
case EventSort.EndsAt:
return {
endsAt: (0, api_1.graphQLSortOrderToPrisma)(sortOrder)
};
case EventSort.StartsAt:
default:
return {
startsAt: (0, api_1.graphQLSortOrderToPrisma)(sortOrder)
};
}
};
exports.createEventOrder = createEventOrder;
const createTagFilter = (filter) => {
var _a;
if ((_a = filter === null || filter === void 0 ? void 0 : filter.tags) === null || _a === void 0 ? void 0 : _a.length) {
return {
tags: {
some: {
tagId: {
in: filter === null || filter === void 0 ? void 0 : filter.tags
}
}
}
};
}
return {};
};
const createUpcomingOnlyFilter = (filter) => {
if (filter === null || filter === void 0 ? void 0 : filter.upcomingOnly) {
return {
OR: [
{
startsAt: {
gte: new Date()
}
},
{
endsAt: {
gte: new Date()
}
}
]
};
}
return {};
};
const createFromFilter = (filter) => {
if (filter === null || filter === void 0 ? void 0 : filter.from) {
return {
OR: [
{
startsAt: {
gte: filter.from
}
},
{
endsAt: {
gte: filter.from
}
}
]
};
}
return {};
};
const createToFilter = (filter) => {
if (filter === null || filter === void 0 ? void 0 : filter.to) {
return {
OR: [
{
startsAt: {
lte: filter.to
}
},
{
endsAt: {
lte: filter.to
}
}
]
};
}
return {};
};
const createNameFilter = (filter) => {
if (filter === null || filter === void 0 ? void 0 : filter.name) {
return {
OR: [
{
name: {
contains: filter.name,
mode: 'insensitive'
}
}
]
};
}
return {};
};
const createLocationFilter = (filter) => {
if (filter === null || filter === void 0 ? void 0 : filter.location) {
return {
OR: [
{
location: {
contains: filter.location,
mode: 'insensitive'
}
}
]
};
}
return {};
};
const createEventFilter = (filter) => ({
AND: [
createUpcomingOnlyFilter(filter),
createFromFilter(filter),
createToFilter(filter),
createTagFilter(filter),
createNameFilter(filter),
createLocationFilter(filter)
]
});
exports.createEventFilter = createEventFilter;
const getEvents = (filter, sortedField, order, cursorId, skip, take, event) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
const orderBy = (0, exports.createEventOrder)(sortedField, order);
const where = (0, exports.createEventFilter)(filter);
const [totalCount, events] = yield Promise.all([
event.count({
where,
orderBy
}),
event.findMany({
where,
skip,
take: (0, api_1.getMaxTake)(take) + 1,
orderBy,
cursor: cursorId ? { id: cursorId } : undefined
})
]);
const nodes = events.slice(0, take);
const firstEvent = nodes[0];
const lastEvent = nodes[nodes.length - 1];
const hasPreviousPage = Boolean(skip);
const hasNextPage = events.length > nodes.length;
return {
nodes,
totalCount,
pageInfo: {
hasPreviousPage,
hasNextPage,
startCursor: firstEvent === null || firstEvent === void 0 ? void 0 : firstEvent.id,
endCursor: lastEvent === null || lastEvent === void 0 ? void 0 : lastEvent.id
}
};
});
exports.getEvents = getEvents;
const getImportedEventsIds = (event) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
const externalEventsIds = event
.findMany({
where: {
externalSourceId: {
not: null
}
}
})
.then(res => res.map(single => single.externalSourceId));
return externalEventsIds;
});
exports.getImportedEventsIds = getImportedEventsIds;
//# sourceMappingURL=event.query.js.map