UNPKG

@exweiv/weiv-data

Version:

Custom API Library for Wix sites to connect MongoDB. Designed to easily switch from wix-data APIs.

58 lines (51 loc) 2.23 kB
import type { CollectionID, WeivDataOptionsCache, ReferringItem, ReferencedItem } from '@exweiv/weiv-data'; import { connectionHandler } from '../Helpers/connection_helpers'; import { validateParams } from '../Helpers/validator'; import { CacheableMemory } from 'cacheable'; import { kaptanLogar } from '../Errors/error_manager'; const cache = new CacheableMemory({ checkInterval: 5000, useClone: false, ttl: 10 * 1000 }); export async function isReferenced(collectionId: CollectionID, propertyName: string, referringItem: ReferringItem, referencedItem: ReferencedItem, options?: WeivDataOptionsCache): Promise<boolean> { try { const { safeReferencedItemIds, safeReferringItemId, safeOptions } = await validateParams<"isReferenced">( { collectionId, propertyName, referencedItem, referringItem, options }, ["collectionId", "propertyName", "referringItem", "referencedItem"], "isReferenced" ); const { suppressAuth, readConcern, enableCache, cacheTimeout } = safeOptions || {}; const cacheKey = `${collectionId}-${propertyName}-${referringItem}-${referencedItem}-${options ? JSON.stringify(options) : "{}"}`; if (enableCache) { const cachedItem = cache.get<boolean>(cacheKey); if (cachedItem) { return cachedItem; } } const references = safeReferencedItemIds; const itemId = safeReferringItemId; const { collection } = await connectionHandler(collectionId, suppressAuth); const totalCount = await collection.countDocuments( { _id: itemId, [propertyName]: { $in: references } }, { readConcern } ); if (totalCount > 0) { if (enableCache) { cache.set(cacheKey, true, cacheTimeout || 15); } return true; } else { if (enableCache) { cache.set(cacheKey, false, cacheTimeout || 15); } return false; } } catch (err) { kaptanLogar("00017", `when checking if item is referenced: ${err}`); } } /**@internal */ export function getIsReferencedCache() { return cache; }