autotrader-connect-api
Version:
Production-ready TypeScript wrapper for Auto Trader UK Connect APIs
222 lines • 8.46 kB
JavaScript
"use strict";
/**
* Search module for AutoTrader API
* Handles search-related endpoints and operations
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMarketInsights = exports.getRelatedSearches = exports.trackSearchInteraction = exports.getSearchAnalytics = exports.getPopularSearches = exports.compareVehicles = exports.executeSavedSearch = exports.deleteSavedSearch = exports.updateSavedSearch = exports.getSavedSearches = exports.saveSearch = exports.getSearchSuggestions = exports.quickSearch = exports.searchVehicles = void 0;
const client_1 = __importDefault(require("../client"));
/**
* Perform enhanced vehicle search with facets and suggestions
* @param filters Search filters and parameters
* @returns Promise resolving to enhanced search results
*/
async function searchVehicles(filters = {}) {
const response = await client_1.default.get('/search', {
params: {
// Basic filters
make: Array.isArray(filters.make) ? filters.make.join(',') : filters.make,
model: Array.isArray(filters.model) ? filters.model.join(',') : filters.model,
// Price and year ranges
priceFrom: filters.priceRange?.min,
priceTo: filters.priceRange?.max,
yearFrom: filters.yearRange?.min,
yearTo: filters.yearRange?.max,
mileageFrom: filters.mileageRange?.min,
mileageTo: filters.mileageRange?.max,
// Location
postcode: filters.postcode,
radius: filters.radius,
// Vehicle types
fuelType: Array.isArray(filters.fuelType) ? filters.fuelType.join(',') : filters.fuelType,
transmission: Array.isArray(filters.transmission) ? filters.transmission.join(',') : filters.transmission,
bodyType: Array.isArray(filters.bodyType) ? filters.bodyType.join(',') : filters.bodyType,
condition: Array.isArray(filters.condition) ? filters.condition.join(',') : filters.condition,
// Advanced options
includeNationwide: filters.includeNationwide,
hideTradeSellerAds: filters.hideTradeSellerAds,
hideDuplicateAds: filters.hideDuplicateAds,
onlyRecentlyAdded: filters.onlyRecentlyAdded,
onlyPriceReduced: filters.onlyPriceReduced,
onlyWithPhotos: filters.onlyWithPhotos,
onlyWithVideo: filters.onlyWithVideo,
// Dealer preferences
preferredDealers: filters.preferredDealers?.join(','),
excludedDealers: filters.excludedDealers?.join(','),
dealerRatingMin: filters.dealerRatingMin,
// Finance
financeRequired: filters.financeRequired,
monthlyBudget: filters.monthlyBudget,
depositAmount: filters.depositAmount,
creditRating: filters.creditRating,
// Sorting and pagination
sortBy: filters.sortBy || 'relevance',
sortOrder: filters.sortOrder || 'desc',
page: filters.page || 1,
pageSize: filters.pageSize || 25,
// Request additional data
includeFacets: true,
includeSuggestions: true,
includeMarketInsights: true,
},
});
return response;
}
exports.searchVehicles = searchVehicles;
/**
* Quick search for autocomplete and suggestions
* @param params Quick search parameters
* @returns Promise resolving to quick search results
*/
async function quickSearch(params) {
const response = await client_1.default.get('/search/quick', {
params: {
query: params.query,
make: params.make,
model: params.model,
postcode: params.postcode,
maxPrice: params.maxPrice,
radius: params.radius,
limit: params.limit || 10,
},
});
return response.data;
}
exports.quickSearch = quickSearch;
/**
* Get search suggestions based on partial input
* @param query Partial search query
* @param type Type of suggestions to get
* @returns Promise resolving to suggestions
*/
async function getSearchSuggestions(query, type) {
const response = await client_1.default.get('/search/suggestions', {
params: { query, type: type || 'all' },
});
return response.data;
}
exports.getSearchSuggestions = getSearchSuggestions;
/**
* Save a search for future alerts
* @param searchData Search data to save
* @returns Promise resolving to saved search
*/
async function saveSearch(searchData) {
const response = await client_1.default.post('/search/saved', searchData);
return response.data;
}
exports.saveSearch = saveSearch;
/**
* Get user's saved searches
* @returns Promise resolving to array of saved searches
*/
async function getSavedSearches() {
const response = await client_1.default.get('/search/saved');
return response.data;
}
exports.getSavedSearches = getSavedSearches;
/**
* Update a saved search
* @param searchId Saved search ID
* @param updateData Updated search data
* @returns Promise resolving to updated saved search
*/
async function updateSavedSearch(searchId, updateData) {
const response = await client_1.default.put(`/search/saved/${searchId}`, updateData);
return response.data;
}
exports.updateSavedSearch = updateSavedSearch;
/**
* Delete a saved search
* @param searchId Saved search ID
* @returns Promise resolving to deletion confirmation
*/
async function deleteSavedSearch(searchId) {
const response = await client_1.default.delete(`/search/saved/${searchId}`);
return response.data;
}
exports.deleteSavedSearch = deleteSavedSearch;
/**
* Execute a saved search
* @param searchId Saved search ID
* @returns Promise resolving to search results
*/
async function executeSavedSearch(searchId) {
const response = await client_1.default.get(`/search/saved/${searchId}/execute`);
return response;
}
exports.executeSavedSearch = executeSavedSearch;
/**
* Compare multiple vehicles
* @param vehicleIds Array of vehicle IDs to compare
* @returns Promise resolving to comparison data
*/
async function compareVehicles(vehicleIds) {
const response = await client_1.default.post('/search/compare', {
vehicleIds,
});
return response.data;
}
exports.compareVehicles = compareVehicles;
/**
* Get popular searches
* @param category Optional category filter
* @returns Promise resolving to popular searches
*/
async function getPopularSearches(category) {
const response = await client_1.default.get('/search/popular', {
params: { category },
});
return response.data;
}
exports.getPopularSearches = getPopularSearches;
/**
* Get search analytics and insights
* @param timeframe Time period for analytics
* @returns Promise resolving to search analytics
*/
async function getSearchAnalytics(timeframe = 'month') {
const response = await client_1.default.get('/search/analytics', {
params: { timeframe },
});
return response.data;
}
exports.getSearchAnalytics = getSearchAnalytics;
/**
* Track search interaction
* @param searchId Search ID
* @param interaction Interaction data
* @returns Promise resolving to tracking confirmation
*/
async function trackSearchInteraction(searchId, interaction) {
const response = await client_1.default.post(`/search/${searchId}/track`, {
...interaction,
timestamp: interaction.timestamp || new Date().toISOString(),
});
return response.data;
}
exports.trackSearchInteraction = trackSearchInteraction;
/**
* Get related searches based on current search
* @param filters Current search filters
* @returns Promise resolving to related search suggestions
*/
async function getRelatedSearches(filters) {
const response = await client_1.default.post('/search/related', { filters });
return response.data;
}
exports.getRelatedSearches = getRelatedSearches;
/**
* Get market insights for search results
* @param filters Search filters to analyze
* @returns Promise resolving to market insights
*/
async function getMarketInsights(filters) {
const response = await client_1.default.post('/search/market-insights', { filters });
return response.data;
}
exports.getMarketInsights = getMarketInsights;
//# sourceMappingURL=search.js.map