Initial Commit

This commit is contained in:
Eric Gullickson
2025-12-17 15:43:32 -06:00
parent cd0cfa8913
commit b611b56336
16 changed files with 83 additions and 202 deletions

View File

@@ -13,6 +13,9 @@ import {
} from './vehicles.types';
import { logger } from '../../../core/logging/logger';
import { cacheService } from '../../../core/config/redis';
import { getStorageService } from '../../../core/storage/storage.service';
import * as fs from 'fs/promises';
import * as path from 'path';
import { isValidVIN } from '../../../shared-minimal/utils/validators';
import { normalizeMakeName, normalizeModelName } from './name-normalizer';
import { getVehicleDataService, getPool } from '../../platform';
@@ -133,6 +136,59 @@ export class VehiclesService {
throw new Error('Unauthorized');
}
logger.info('Deleting vehicle', {
vehicleId: id,
userId,
hasImageKey: !!existing.imageStorageKey,
hasImageBucket: !!existing.imageStorageBucket,
imageStorageKey: existing.imageStorageKey,
imageStorageBucket: existing.imageStorageBucket
});
// Delete associated image from storage if present
if (existing.imageStorageKey && existing.imageStorageBucket) {
try {
const storage = getStorageService();
logger.info('Attempting to delete vehicle image', {
vehicleId: id,
bucket: existing.imageStorageBucket,
key: existing.imageStorageKey
});
await storage.deleteObject(existing.imageStorageBucket, existing.imageStorageKey);
logger.info('Successfully deleted vehicle image on vehicle deletion', {
vehicleId: id,
bucket: existing.imageStorageBucket,
key: existing.imageStorageKey
});
// Clean up empty vehicle directory
// Key format: vehicle-images/{userId}/{vehicleId}/{filename}
const basePath = '/app/data/documents';
const vehicleDir = path.join(basePath, path.dirname(existing.imageStorageKey));
try {
await fs.rmdir(vehicleDir);
logger.info('Removed empty vehicle image directory', { vehicleId: id, directory: vehicleDir });
} catch (dirError) {
// Directory might not be empty or might not exist, ignore
logger.debug('Could not remove vehicle image directory', {
vehicleId: id,
directory: vehicleDir,
error: dirError instanceof Error ? dirError.message : String(dirError)
});
}
} catch (error) {
// Log warning but don't block vehicle deletion on storage failure
logger.warn('Failed to delete vehicle image on vehicle deletion', {
vehicleId: id,
bucket: existing.imageStorageBucket,
key: existing.imageStorageKey,
error: error instanceof Error ? error.message : String(error)
});
}
} else {
logger.info('No image to delete for vehicle', { vehicleId: id });
}
// Soft delete
await this.repository.softDelete(id);