class ProductFilter {
constructor(catalogAccessor) {
this.catalogAccessor = catalogAccessor;
}
// Filter products by destination and nationality
async getProductsForTravel(destination, nationality, options = {}) {
const filters = {
destination,
nationality,
status: 'ACTIVE',
currency: options.currency || 'USD',
...options
};
return await this.catalogAccessor.getProducts(filters);
}
// Filter products by travel purpose
async getProductsByPurpose(travelPurpose, options = {}) {
const filters = {
travelPurpose,
status: 'ACTIVE',
currency: options.currency || 'USD',
...options
};
return await this.catalogAccessor.getProducts(filters);
}
// Filter products by price range
async getProductsByPriceRange(minPrice, maxPrice, options = {}) {
const allProducts = await this.catalogAccessor.getProducts({
status: 'ACTIVE',
currency: options.currency || 'USD',
...options
});
return allProducts.filter(product => {
const price = product.pricing?.price || 0;
return price >= minPrice && price <= maxPrice;
});
}
// Filter products by processing time
async getProductsByProcessingTime(maxHours, options = {}) {
const allProducts = await this.catalogAccessor.getProducts({
status: 'ACTIVE',
currency: options.currency || 'USD',
...options
});
return allProducts.filter(product => {
const processingTime = product.processingTime;
if (!processingTime) return false;
const hours = processingTime.unit === 'HOURS' ? processingTime.value :
processingTime.unit === 'DAYS' ? processingTime.value * 24 :
processingTime.unit === 'MINUTES' ? processingTime.value / 60 : 0;
return hours <= maxHours;
});
}
// Get consolidated products (one per destination)
async getConsolidatedProducts(options = {}) {
const filters = {
consolidateProducts: true,
status: 'ACTIVE',
currency: options.currency || 'USD',
...options
};
return await this.catalogAccessor.getProducts(filters);
}
}
// Usage examples
const productFilter = new ProductFilter(catalogAccessor);
// Get products for US citizens traveling to Turkey
productFilter.getProductsForTravel('TUR', 'USA')
.then(products => {
console.log('Turkey products for US citizens:', products);
});
// Get tourism products
productFilter.getProductsByPurpose('TOURISM')
.then(products => {
console.log('Tourism products:', products);
});
// Get products under $100
productFilter.getProductsByPriceRange(0, 100)
.then(products => {
console.log('Products under $100:', products);
});
// Get products with 24-hour processing
productFilter.getProductsByProcessingTime(24)
.then(products => {
console.log('Fast processing products:', products);
});