Initial Commit
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user