autotrader-connect-api
Version:
Production-ready TypeScript wrapper for Auto Trader UK Connect APIs
291 lines • 7.67 kB
TypeScript
/**
* Stock management types for AutoTrader API
*/
import { Vehicle } from './vehicle';
import { PaginatedResponse } from './common';
/**
* Stock item status
*/
export type StockStatus = 'Available' | 'Reserved' | 'Sold' | 'Withdrawn' | 'On Hold' | 'In Preparation' | 'Damaged';
/**
* Stock visibility settings
*/
export type StockVisibility = 'Live' | 'Hidden' | 'Pending' | 'Expired' | 'Rejected';
/**
* Stock pricing information
*/
export interface StockPricing {
retailPrice: number;
tradePrice?: number;
costPrice?: number;
margin?: number;
marginPercentage?: number;
vatIncluded: boolean;
negotiable: boolean;
priceReduced?: {
previousPrice: number;
reductionAmount: number;
reductionDate: string;
};
}
/**
* Stock location information
*/
export interface StockLocation {
siteId: string;
siteName: string;
location: string;
compound?: string;
bayNumber?: string;
keyLocation?: string;
}
/**
* Stock advertising settings
*/
export interface StockAdvertising {
autotraderLive: boolean;
websiteLive: boolean;
forecourtDisplay: boolean;
leadGenerationEnabled: boolean;
promotionLevel?: 'Standard' | 'Featured' | 'Premium';
advertisingPackage?: string;
}
/**
* Stock item (extends Vehicle with additional stock-specific fields)
*/
export interface StockItem extends Vehicle {
stockId: string;
stockNumber?: string;
status: StockStatus;
visibility: StockVisibility;
pricing: StockPricing;
stockLocation?: StockLocation;
advertising?: StockAdvertising;
stockedDate: string;
lastUpdated: string;
soldDate?: string;
estimatedSaleDate?: string;
viewCount?: number;
enquiryCount?: number;
testDriveCount?: number;
daysInStock?: number;
sourceType?: 'Trade In' | 'Auction' | 'Manufacturer' | 'Private' | 'Other';
purchasePrice?: number;
expectedProfit?: number;
reservedBy?: string;
reservedUntil?: string;
preparationTasks?: PreparationTask[];
readyForSale: boolean;
internalNotes?: string;
publicNotes?: string;
}
/**
* Preparation task
*/
export interface PreparationTask {
id: string;
type: 'Cleaning' | 'Mechanical' | 'Bodywork' | 'Documentation' | 'Photography' | 'Other';
description: string;
status: 'Pending' | 'In Progress' | 'Completed' | 'Not Required';
assignedTo?: string;
estimatedHours?: number;
actualHours?: number;
cost?: number;
completedDate?: string;
notes?: string;
}
/**
* Stock search parameters (includes all VehicleSearchParams plus stock-specific filters)
*/
export interface StockSearchParams {
make?: string | string[];
model?: string | string[];
variant?: string | string[];
yearRange?: {
min?: number;
max?: number;
};
priceRange?: {
min?: number;
max?: number;
};
mileageRange?: {
min?: number;
max?: number;
};
condition?: string | string[];
fuelType?: string | string[];
transmission?: string | string[];
bodyType?: string | string[];
doors?: number | number[];
seats?: number | number[];
engineSizeRange?: {
min?: number;
max?: number;
};
powerRange?: {
min?: number;
max?: number;
};
postcode?: string;
radius?: number;
advertiserId?: number | number[];
dealerId?: string | string[];
dealerType?: 'Franchise' | 'Independent' | 'Private';
features?: string | string[];
keyFeatures?: string | string[];
availableDateRange?: {
from?: string;
to?: string;
};
financingAvailable?: boolean;
partExchangeAccepted?: boolean;
homeDeliveryAvailable?: boolean;
warrantyIncluded?: boolean;
excludeWriteOffs?: boolean;
includeImports?: boolean;
photosOnly?: boolean;
sortOrder?: 'asc' | 'desc';
page?: number;
pageSize?: number;
stockId?: string | string[];
stockNumber?: string | string[];
status?: StockStatus | StockStatus[];
visibility?: StockVisibility | StockVisibility[];
stockedDateFrom?: string;
stockedDateTo?: string;
soldDateFrom?: string;
soldDateTo?: string;
lastUpdatedFrom?: string;
lastUpdatedTo?: string;
siteId?: string | string[];
siteName?: string | string[];
minViewCount?: number;
maxViewCount?: number;
minEnquiryCount?: number;
maxEnquiryCount?: number;
minDaysInStock?: number;
maxDaysInStock?: number;
sourceType?: string | string[];
purchasePriceRange?: {
min?: number;
max?: number;
};
expectedProfitRange?: {
min?: number;
max?: number;
};
marginRange?: {
min?: number;
max?: number;
};
readyForSale?: boolean;
hasReservation?: boolean;
requiresPreparation?: boolean;
sortBy?: 'stockedDate' | 'lastUpdated' | 'soldDate' | 'viewCount' | 'enquiryCount' | 'daysInStock' | 'margin' | 'price' | 'mileage' | 'year' | 'distance' | 'relevance' | 'newest';
}
/**
* Stock creation request
*/
export interface CreateStockRequest {
make: string;
model: string;
variant?: string;
year: number;
registration?: string;
vin?: string;
mileage: number;
fuelType: string;
transmission: string;
bodyType: string;
doors: number;
seats: number;
colour: string;
retailPrice: number;
tradePrice?: number;
costPrice?: number;
vatIncluded?: boolean;
negotiable?: boolean;
stockNumber?: string;
siteId?: string;
sourceType?: string;
purchasePrice?: number;
description?: string;
keyFeatures?: string[];
internalNotes?: string;
imageUrls?: string[];
}
/**
* Stock update request
*/
export interface UpdateStockRequest {
[key: string]: unknown;
status?: StockStatus;
visibility?: StockVisibility;
pricing?: Partial<StockPricing>;
advertising?: Partial<StockAdvertising>;
preparationTasks?: PreparationTask[];
internalNotes?: string;
publicNotes?: string;
}
/**
* Stock response from API
*/
export interface StockResponse extends StockItem {
performanceMetrics?: {
averageViewsPerDay?: number;
enquiryConversionRate?: number;
daysToSell?: number;
competitivePosition?: 'Above Average' | 'Average' | 'Below Average';
};
marketAnalysis?: {
similarVehiclesCount?: number;
averageMarketPrice?: number;
priceCompetitiveness?: 'Competitive' | 'Above Market' | 'Below Market';
recommendedPrice?: number;
};
}
/**
* Stock list response
*/
export type StockListResponse = PaginatedResponse<StockResponse>;
/**
* Stock statistics
*/
export interface StockStatistics {
totalStock: number;
availableStock: number;
soldThisMonth: number;
averageDaysToSell: number;
totalValue: number;
averageMargin: number;
topPerformingMakes: Array<{
make: string;
count: number;
averageDaysToSell: number;
}>;
statusBreakdown: Record<StockStatus, number>;
visibilityBreakdown: Record<StockVisibility, number>;
}
/**
* Bulk stock operation request
*/
export interface BulkStockOperation {
operation: 'update' | 'delete' | 'publish' | 'hide';
stockIds: string[];
updateData?: Partial<UpdateStockRequest>;
}
/**
* Bulk operation response
*/
export interface BulkOperationResponse {
success: boolean;
processedCount: number;
successfulCount: number;
failedCount: number;
errors?: Array<{
stockId: string;
error: string;
}>;
}
//# sourceMappingURL=stock.d.ts.map