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
TypeScript
/**
* 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[]>;