UNPKG

autotrader-connect-api

Version:

Production-ready TypeScript wrapper for Auto Trader UK Connect APIs

283 lines 9.85 kB
/** * Stock management module for AutoTrader API * Handles stock-related endpoints and operations */ import client from '../client'; /** * Search stock with various filters * @param params Search parameters and filters * @returns Promise resolving to paginated stock results */ export async function searchStock(params = {}) { const response = await client.get('/stock/search', { params: { // Stock-specific filters stockId: Array.isArray(params.stockId) ? params.stockId.join(',') : params.stockId, stockNumber: Array.isArray(params.stockNumber) ? params.stockNumber.join(',') : params.stockNumber, status: Array.isArray(params.status) ? params.status.join(',') : params.status, visibility: Array.isArray(params.visibility) ? params.visibility.join(',') : params.visibility, // Date filters stockedDateFrom: params.stockedDateFrom, stockedDateTo: params.stockedDateTo, soldDateFrom: params.soldDateFrom, soldDateTo: params.soldDateTo, lastUpdatedFrom: params.lastUpdatedFrom, lastUpdatedTo: params.lastUpdatedTo, // Location filters siteId: Array.isArray(params.siteId) ? params.siteId.join(',') : params.siteId, siteName: Array.isArray(params.siteName) ? params.siteName.join(',') : params.siteName, // Advertiser/dealer filters advertiserId: Array.isArray(params.advertiserId) ? params.advertiserId.join(',') : params.advertiserId, dealerId: Array.isArray(params.dealerId) ? params.dealerId.join(',') : params.dealerId, // Legacy support dealerType: params.dealerType, // Performance filters minViewCount: params.minViewCount, maxViewCount: params.maxViewCount, minEnquiryCount: params.minEnquiryCount, maxEnquiryCount: params.maxEnquiryCount, minDaysInStock: params.minDaysInStock, maxDaysInStock: params.maxDaysInStock, // Source filters sourceType: Array.isArray(params.sourceType) ? params.sourceType.join(',') : params.sourceType, // Financial filters purchasePriceFrom: params.purchasePriceRange?.min, purchasePriceTo: params.purchasePriceRange?.max, expectedProfitFrom: params.expectedProfitRange?.min, expectedProfitTo: params.expectedProfitRange?.max, marginFrom: params.marginRange?.min, marginTo: params.marginRange?.max, // Status filters readyForSale: params.readyForSale, hasReservation: params.hasReservation, requiresPreparation: params.requiresPreparation, // Basic vehicle filters (inherited) make: Array.isArray(params.make) ? params.make.join(',') : params.make, model: Array.isArray(params.model) ? params.model.join(',') : params.model, yearFrom: params.yearRange?.min, yearTo: params.yearRange?.max, priceFrom: params.priceRange?.min, priceTo: params.priceRange?.max, mileageFrom: params.mileageRange?.min, mileageTo: params.mileageRange?.max, // Sorting and pagination sortBy: params.sortBy || 'stockedDate', sortOrder: params.sortOrder || 'desc', page: params.page || 1, pageSize: params.pageSize || 25, }, }); return response; } /** * Get stock item by ID * @param stockId Stock item identifier * @returns Promise resolving to stock item data */ export async function getStockById(stockId) { const response = await client.get(`/stock/${stockId}`); return response.data; } /** * Create new stock item * @param stockData Stock item data * @returns Promise resolving to created stock item */ export async function createStock(stockData) { const response = await client.post('/stock', stockData); return response.data; } /** * Update existing stock item * @param stockId Stock item identifier * @param updateData Updated stock data * @returns Promise resolving to updated stock item */ export async function updateStock(stockId, updateData) { const response = await client.put(`/stock/${stockId}`, updateData); return response.data; } /** * Delete stock item * @param stockId Stock item identifier * @returns Promise resolving to deletion confirmation */ export async function deleteStock(stockId) { const response = await client.delete(`/stock/${stockId}`); return response.data; } /** * Get stock statistics and analytics * @param filters Optional filters to apply to statistics * @returns Promise resolving to stock statistics */ export async function getStockStatistics(filters) { const options = filters ? { params: filters } : undefined; const response = await client.get('/stock/statistics', options); return response.data; } /** * Bulk update stock items * @param operation Bulk operation details * @returns Promise resolving to operation results */ export async function bulkUpdateStock(operation) { const response = await client.post('/stock/bulk', operation); return response.data; } /** * Publish stock items to AutoTrader * @param stockIds Array of stock IDs to publish * @returns Promise resolving to publish results */ export async function publishStock(stockIds) { return bulkUpdateStock({ operation: 'publish', stockIds, updateData: { visibility: 'Live', advertising: { autotraderLive: true, }, }, }); } /** * Hide stock items from AutoTrader * @param stockIds Array of stock IDs to hide * @returns Promise resolving to hide results */ export async function hideStock(stockIds) { return bulkUpdateStock({ operation: 'hide', stockIds, updateData: { visibility: 'Hidden', advertising: { autotraderLive: false, }, }, }); } /** * Mark stock items as sold * @param stockIds Array of stock IDs to mark as sold * @param soldDate Optional sold date (defaults to current date) * @returns Promise resolving to update results */ export async function markStockAsSold(stockIds, soldDate) { return bulkUpdateStock({ operation: 'update', stockIds, updateData: { status: 'Sold', visibility: 'Hidden', soldDate: soldDate || new Date().toISOString(), advertising: { autotraderLive: false, }, }, }); } /** * Reserve stock items * @param stockIds Array of stock IDs to reserve * @param reservedBy Who reserved the items * @param reservedUntil Reservation expiry date * @returns Promise resolving to reservation results */ export async function reserveStock(stockIds, reservedBy, reservedUntil) { return bulkUpdateStock({ operation: 'update', stockIds, updateData: { status: 'Reserved', reservedBy, reservedUntil, }, }); } /** * Release stock reservations * @param stockIds Array of stock IDs to release * @returns Promise resolving to release results */ export async function releaseStockReservation(stockIds) { return bulkUpdateStock({ operation: 'update', stockIds, updateData: { status: 'Available', reservedBy: undefined, reservedUntil: undefined, }, }); } /** * Get stock performance metrics * @param stockId Stock item identifier * @returns Promise resolving to performance data */ export async function getStockPerformance(stockId) { const response = await client.get(`/stock/${stockId}/performance`); return response.data; } /** * Get stock valuation * @param stockId Stock item identifier * @returns Promise resolving to valuation data */ export async function getStockValuation(stockId) { const response = await client.get(`/stock/${stockId}/valuation`); return response.data; } /** * Update stock pricing * @param stockId Stock item identifier * @param pricing New pricing information * @returns Promise resolving to updated stock item */ export async function updateStockPricing(stockId, pricing) { const pricingUpdate = { retailPrice: pricing.retailPrice, }; if (pricing.tradePrice !== undefined) { pricingUpdate.tradePrice = pricing.tradePrice; } if (pricing.negotiable !== undefined) { pricingUpdate.negotiable = pricing.negotiable; } if (pricing.priceReduced && pricing.previousPrice) { pricingUpdate.priceReduced = { previousPrice: pricing.previousPrice, reductionAmount: pricing.previousPrice - pricing.retailPrice, reductionDate: new Date().toISOString(), }; } const updateData = { pricing: pricingUpdate, }; return updateStock(stockId, updateData); } /** * Add images to stock item * @param stockId Stock item identifier * @param imageUrls Array of image URLs to add * @returns Promise resolving to updated stock item */ export async function addStockImages(stockId, imageUrls) { const response = await client.post(`/stock/${stockId}/images`, { imageUrls }); return response.data; } /** * Remove images from stock item * @param stockId Stock item identifier * @param imageIds Array of image IDs to remove * @returns Promise resolving to updated stock item */ export async function removeStockImages(stockId, imageIds) { const response = await client.delete(`/stock/${stockId}/images`, { params: { imageIds: imageIds.join(',') }, }); return response.data; } //# sourceMappingURL=stock.js.map