import { QueryFilter } from "mongoose"; // MongoDB query builder for actor matching (DID or handle) export const actorFilter = (actor: string): QueryFilter => { if (actor.startsWith("did:")) { return { did: actor } as QueryFilter; } else { return { handle: actor } as QueryFilter; } }; // Filter for documents that are not soft deleted export const notSoftDeletedFilter = (): QueryFilter => { return { takedownRef: { $exists: false } } as QueryFilter; }; // Check if a document is soft deleted export const softDeleted = ( actorOrRecord: { takedownRef?: string | null }, ): boolean => { return !!actorOrRecord.takedownRef; }; // Helper for date range queries export const dateRangeFilter = ( field: string, start?: Date, end?: Date, ): QueryFilter => { const filter: Record = {}; if (start || end) { filter[field] = {}; if (start) (filter[field] as Record).$gte = start; if (end) (filter[field] as Record).$lte = end; } return filter as QueryFilter; }; // Helper for pagination export interface PaginationOptions { limit?: number; skip?: number; sort?: Record; } // Helper for creating compound filters export const andFilter = ( ...filters: QueryFilter[] ): QueryFilter => ({ $and: filters.filter((f) => Object.keys(f).length > 0), } as QueryFilter); export const orFilter = (...filters: QueryFilter[]): QueryFilter => ({ $or: filters.filter((f) => Object.keys(f).length > 0), } as QueryFilter);