UNPKG

autotrader-connect-api

Version:

Production-ready TypeScript wrapper for Auto Trader UK Connect APIs

306 lines 11.2 kB
"use strict"; /** * Stock management module for AutoTrader API * Handles stock-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.removeStockImages = exports.addStockImages = exports.updateStockPricing = exports.getStockValuation = exports.getStockPerformance = exports.releaseStockReservation = exports.reserveStock = exports.markStockAsSold = exports.hideStock = exports.publishStock = exports.bulkUpdateStock = exports.getStockStatistics = exports.deleteStock = exports.updateStock = exports.createStock = exports.getStockById = exports.searchStock = void 0; const client_1 = __importDefault(require("../client")); /** * Search stock with various filters * @param params Search parameters and filters * @returns Promise resolving to paginated stock results */ async function searchStock(params = {}) { const response = await client_1.default.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; } exports.searchStock = searchStock; /** * Get stock item by ID * @param stockId Stock item identifier * @returns Promise resolving to stock item data */ async function getStockById(stockId) { const response = await client_1.default.get(`/stock/${stockId}`); return response.data; } exports.getStockById = getStockById; /** * Create new stock item * @param stockData Stock item data * @returns Promise resolving to created stock item */ async function createStock(stockData) { const response = await client_1.default.post('/stock', stockData); return response.data; } exports.createStock = createStock; /** * Update existing stock item * @param stockId Stock item identifier * @param updateData Updated stock data * @returns Promise resolving to updated stock item */ async function updateStock(stockId, updateData) { const response = await client_1.default.put(`/stock/${stockId}`, updateData); return response.data; } exports.updateStock = updateStock; /** * Delete stock item * @param stockId Stock item identifier * @returns Promise resolving to deletion confirmation */ async function deleteStock(stockId) { const response = await client_1.default.delete(`/stock/${stockId}`); return response.data; } exports.deleteStock = deleteStock; /** * Get stock statistics and analytics * @param filters Optional filters to apply to statistics * @returns Promise resolving to stock statistics */ async function getStockStatistics(filters) { const options = filters ? { params: filters } : undefined; const response = await client_1.default.get('/stock/statistics', options); return response.data; } exports.getStockStatistics = getStockStatistics; /** * Bulk update stock items * @param operation Bulk operation details * @returns Promise resolving to operation results */ async function bulkUpdateStock(operation) { const response = await client_1.default.post('/stock/bulk', operation); return response.data; } exports.bulkUpdateStock = bulkUpdateStock; /** * Publish stock items to AutoTrader * @param stockIds Array of stock IDs to publish * @returns Promise resolving to publish results */ async function publishStock(stockIds) { return bulkUpdateStock({ operation: 'publish', stockIds, updateData: { visibility: 'Live', advertising: { autotraderLive: true, }, }, }); } exports.publishStock = publishStock; /** * Hide stock items from AutoTrader * @param stockIds Array of stock IDs to hide * @returns Promise resolving to hide results */ async function hideStock(stockIds) { return bulkUpdateStock({ operation: 'hide', stockIds, updateData: { visibility: 'Hidden', advertising: { autotraderLive: false, }, }, }); } exports.hideStock = hideStock; /** * 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 */ async function markStockAsSold(stockIds, soldDate) { return bulkUpdateStock({ operation: 'update', stockIds, updateData: { status: 'Sold', visibility: 'Hidden', soldDate: soldDate || new Date().toISOString(), advertising: { autotraderLive: false, }, }, }); } exports.markStockAsSold = markStockAsSold; /** * 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 */ async function reserveStock(stockIds, reservedBy, reservedUntil) { return bulkUpdateStock({ operation: 'update', stockIds, updateData: { status: 'Reserved', reservedBy, reservedUntil, }, }); } exports.reserveStock = reserveStock; /** * Release stock reservations * @param stockIds Array of stock IDs to release * @returns Promise resolving to release results */ async function releaseStockReservation(stockIds) { return bulkUpdateStock({ operation: 'update', stockIds, updateData: { status: 'Available', reservedBy: undefined, reservedUntil: undefined, }, }); } exports.releaseStockReservation = releaseStockReservation; /** * Get stock performance metrics * @param stockId Stock item identifier * @returns Promise resolving to performance data */ async function getStockPerformance(stockId) { const response = await client_1.default.get(`/stock/${stockId}/performance`); return response.data; } exports.getStockPerformance = getStockPerformance; /** * Get stock valuation * @param stockId Stock item identifier * @returns Promise resolving to valuation data */ async function getStockValuation(stockId) { const response = await client_1.default.get(`/stock/${stockId}/valuation`); return response.data; } exports.getStockValuation = getStockValuation; /** * Update stock pricing * @param stockId Stock item identifier * @param pricing New pricing information * @returns Promise resolving to updated stock item */ 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); } exports.updateStockPricing = updateStockPricing; /** * 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 */ async function addStockImages(stockId, imageUrls) { const response = await client_1.default.post(`/stock/${stockId}/images`, { imageUrls }); return response.data; } exports.addStockImages = addStockImages; /** * 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 */ async function removeStockImages(stockId, imageIds) { const response = await client_1.default.delete(`/stock/${stockId}/images`, { params: { imageIds: imageIds.join(',') }, }); return response.data; } exports.removeStockImages = removeStockImages; //# sourceMappingURL=stock.js.map