autotrader-connect-api
Version:
Production-ready TypeScript wrapper for Auto Trader UK Connect APIs
306 lines • 11.2 kB
JavaScript
"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