Very minimal MVP

This commit is contained in:
Eric Gullickson
2025-08-23 09:54:22 -05:00
parent d60c3ec00e
commit 6683f1eeff
12 changed files with 661 additions and 13 deletions

View File

@@ -140,6 +140,81 @@ export class VehiclesService {
await cacheService.del(cacheKey);
}
async getDropdownMakes(): Promise<{ id: number; name: string }[]> {
try {
logger.info('Getting dropdown makes');
const makes = await vpicClient.getAllMakes();
return makes.map(make => ({
id: make.Make_ID,
name: make.Make_Name
}));
} catch (error) {
logger.error('Failed to get dropdown makes', { error });
throw new Error('Failed to load makes');
}
}
async getDropdownModels(make: string): Promise<{ id: number; name: string }[]> {
try {
logger.info('Getting dropdown models', { make });
const models = await vpicClient.getModelsForMake(make);
return models.map(model => ({
id: model.Model_ID,
name: model.Model_Name
}));
} catch (error) {
logger.error('Failed to get dropdown models', { make, error });
throw new Error('Failed to load models');
}
}
async getDropdownTransmissions(): Promise<{ id: number; name: string }[]> {
try {
logger.info('Getting dropdown transmissions');
const transmissions = await vpicClient.getTransmissionTypes();
return transmissions.map(transmission => ({
id: transmission.Id,
name: transmission.Name
}));
} catch (error) {
logger.error('Failed to get dropdown transmissions', { error });
throw new Error('Failed to load transmissions');
}
}
async getDropdownEngines(): Promise<{ id: number; name: string }[]> {
try {
logger.info('Getting dropdown engines');
const engines = await vpicClient.getEngineConfigurations();
return engines.map(engine => ({
id: engine.Id,
name: engine.Name
}));
} catch (error) {
logger.error('Failed to get dropdown engines', { error });
throw new Error('Failed to load engines');
}
}
async getDropdownTrims(): Promise<{ id: number; name: string }[]> {
try {
logger.info('Getting dropdown trims');
const trims = await vpicClient.getTrimLevels();
return trims.map(trim => ({
id: trim.Id,
name: trim.Name
}));
} catch (error) {
logger.error('Failed to get dropdown trims', { error });
throw new Error('Failed to load trims');
}
}
private toResponse(vehicle: Vehicle): VehicleResponse {
return {
id: vehicle.id,
@@ -148,6 +223,11 @@ export class VehiclesService {
make: vehicle.make,
model: vehicle.model,
year: vehicle.year,
engine: vehicle.engine,
transmission: vehicle.transmission,
trimLevel: vehicle.trimLevel,
driveType: vehicle.driveType,
fuelType: vehicle.fuelType,
nickname: vehicle.nickname,
color: vehicle.color,
licensePlate: vehicle.licensePlate,