UNPKG

voyage-and-consumption-mcp-server

Version:

Voyage and consumption management server handling vessel voyages, fuel consumption, performance monitoring, and operational data with ERP access for data extraction

115 lines (114 loc) 4.2 kB
/** * Database Query Builder Utility * * Centralizes MongoDB query building logic that was duplicated across * 8 different database operations in the codebase. * * This utility extracts common patterns: * - IMO No filtering (5 identical instances) * - Date range filtering (5 identical instances) * - Field projections (5 different projection patterns) * - Data transformation and sorting (5 similar instances) * - Component queries and CRUD operations */ export interface DateRangeFilter { startDate?: string; endDate?: string; } export interface MongoQuery { [key: string]: any; } export interface ProjectionFields { [key: string]: 1 | 0; } export type DataType = 'fuel' | 'freshwater' | 'mecc' | 'cylinder' | 'aecc'; /** * Builds the basic IMO query filter with input sanitization * @param imo - The IMO number to filter by * @returns MongoDB query object for IMO filtering */ export declare function buildImoQuery(imo: number): MongoQuery; /** * Adds date range filtering to an existing query with input validation * @param query - The existing query object * @param dateRange - Optional start and end dates * @returns Updated query with date filtering */ export declare function addDateRangeFilter(query: MongoQuery, dateRange?: DateRangeFilter): MongoQuery; /** * Builds a complete vessel data query with IMO and optional date filtering * @param imo - The IMO number to filter by * @param dateRange - Optional date range filter * @returns Complete MongoDB query object */ export declare function buildVesselDataQuery(imo: number, dateRange?: DateRangeFilter): MongoQuery; /** * Gets the field projection for different data types * @param dataType - The type of data being queried * @returns MongoDB projection object */ export declare function getProjectionByType(dataType: DataType): ProjectionFields; /** * Transforms MongoDB documents to flattened structure * @param documents - Array of MongoDB documents * @param dataType - The type of data to transform * @returns Array of transformed documents */ export declare function transformDocuments(documents: any[], dataType: DataType): any[]; /** * Sorts documents by Report Date (newest first) * @param documents - Array of documents to sort * @returns Sorted array */ export declare function sortByReportDate(documents: any[]): any[]; /** * Builds component query patterns for component data lookup with input sanitization * @param imo - The IMO number (sanitized) * @param questionNumber - Optional question number for specific queries (sanitized) * @returns Object with different component query patterns */ export declare function buildComponentQueries(imo: string, questionNumber?: string): { imoQuery: { componentNo: { $regex: string; $options: string; }; }; specificQuery: (componentNo: string) => { componentNo: string; }; similarQuery: { componentNo: { $regex: string; $options: string; }; } | null; }; /** * Creates ObjectId filter for MongoDB updates with validation * @param id - The string ID to convert to ObjectId * @returns MongoDB filter object */ export declare function createObjectIdFilter(id: string): MongoQuery; /** * Sanitizes a complete MongoDB query object * @param query - The query object to sanitize * @returns Sanitized query object */ export declare function sanitizeMongoQuery(query: any): MongoQuery; /** * Builds a safe search query for text fields * @param searchText - The text to search for * @param fields - Array of field names to search in * @returns Safe MongoDB query object */ export declare function buildSafeSearchQuery(searchText: string, fields: string[]): MongoQuery; /** * Executes a complete vessel data query with standardized processing * @param collection - MongoDB collection instance * @param imo - IMO number to query * @param dataType - Type of data to retrieve * @param dateRange - Optional date range filter * @returns Processed query results */ export declare function executeVesselDataQuery(collection: any, imo: number, dataType: DataType, dateRange?: DateRangeFilter): Promise<any[]>;