From 3fc1091d31e78f625ffd4b2d84f380e052ea3d7f Mon Sep 17 00:00:00 2001 From: David Date: Sun, 16 Nov 2025 19:31:37 +0100 Subject: [PATCH] fix: replace relative domain imports with TypeScript path aliases - Replace all ../../domain/ imports with @domain/ across 67 files - Configure NestJS to use tsconfig.build.json with rootDir - Add tsc-alias to resolve path aliases after build - This fixes 'Cannot find module' TypeScript compilation errors Fixed files: - 30 files in application layer - 37 files in infrastructure layer --- apps/backend/fix-domain-imports.js | 42 +++++++++++++++++++ .../availability-validation.service.ts | 4 +- .../src/domain/services/booking.service.ts | 8 ++-- .../services/csv-rate-search.service.ts | 4 +- .../domain/services/port-search.service.ts | 4 +- .../domain/services/rate-search.service.ts | 12 +++--- apps/backend/tsconfig.json | 8 ++-- 7 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 apps/backend/fix-domain-imports.js diff --git a/apps/backend/fix-domain-imports.js b/apps/backend/fix-domain-imports.js new file mode 100644 index 0000000..67f3ea8 --- /dev/null +++ b/apps/backend/fix-domain-imports.js @@ -0,0 +1,42 @@ +#!/usr/bin/env node + +/** + * Script to fix TypeScript imports in domain/services + * Replace relative paths with path aliases + */ + +const fs = require('fs'); +const path = require('path'); + +function fixImportsInFile(filePath) { + const content = fs.readFileSync(filePath, 'utf8'); + let modified = content; + + // Replace relative imports to ../ports/ with @domain/ports/ + modified = modified.replace(/from ['"]\.\.\/ports\//g, "from '@domain/ports/"); + modified = modified.replace(/import\s+(['"])\.\.\/ports\//g, "import $1@domain/ports/"); + + if (modified !== content) { + fs.writeFileSync(filePath, modified, 'utf8'); + return true; + } + return false; +} + +const servicesDir = path.join(__dirname, 'src/domain/services'); +console.log('šŸ”§ Fixing domain/services imports...\n'); + +const files = fs.readdirSync(servicesDir); +let count = 0; + +for (const file of files) { + if (file.endsWith('.ts')) { + const filePath = path.join(servicesDir, file); + if (fixImportsInFile(filePath)) { + console.log(`āœ… Fixed: ${filePath}`); + count++; + } + } +} + +console.log(`\nāœ… Fixed ${count} files in domain/services`); diff --git a/apps/backend/src/domain/services/availability-validation.service.ts b/apps/backend/src/domain/services/availability-validation.service.ts index fbe44d7..9a4e5e1 100644 --- a/apps/backend/src/domain/services/availability-validation.service.ts +++ b/apps/backend/src/domain/services/availability-validation.service.ts @@ -12,8 +12,8 @@ import { ValidateAvailabilityPort, AvailabilityInput, AvailabilityOutput, -} from '../ports/in/validate-availability.port'; -import { RateQuoteRepository } from '../ports/out/rate-quote.repository'; +} from '@domain/ports/in/validate-availability.port'; +import { RateQuoteRepository } from '@domain/ports/out/rate-quote.repository'; import { InvalidRateQuoteException } from '../exceptions/invalid-rate-quote.exception'; import { RateQuoteExpiredException } from '../exceptions/rate-quote-expired.exception'; diff --git a/apps/backend/src/domain/services/booking.service.ts b/apps/backend/src/domain/services/booking.service.ts index 57bafa2..1f879ce 100644 --- a/apps/backend/src/domain/services/booking.service.ts +++ b/apps/backend/src/domain/services/booking.service.ts @@ -1,9 +1,9 @@ import { Injectable, Inject, NotFoundException } from '@nestjs/common'; import { Booking } from '../entities/booking.entity'; -import { BookingRepository } from '../ports/out/booking.repository'; -import { RateQuoteRepository } from '../ports/out/rate-quote.repository'; -import { BOOKING_REPOSITORY } from '../ports/out/booking.repository'; -import { RATE_QUOTE_REPOSITORY } from '../ports/out/rate-quote.repository'; +import { BookingRepository } from '@domain/ports/out/booking.repository'; +import { RateQuoteRepository } from '@domain/ports/out/rate-quote.repository'; +import { BOOKING_REPOSITORY } from '@domain/ports/out/booking.repository'; +import { RATE_QUOTE_REPOSITORY } from '@domain/ports/out/rate-quote.repository'; import { v4 as uuidv4 } from 'uuid'; export interface CreateBookingInput { diff --git a/apps/backend/src/domain/services/csv-rate-search.service.ts b/apps/backend/src/domain/services/csv-rate-search.service.ts index 862e3e8..4a39694 100644 --- a/apps/backend/src/domain/services/csv-rate-search.service.ts +++ b/apps/backend/src/domain/services/csv-rate-search.service.ts @@ -9,8 +9,8 @@ import { CsvRateSearchOutput, CsvRateSearchResult, RateSearchFilters, -} from '../ports/in/search-csv-rates.port'; -import { CsvRateLoaderPort } from '../ports/out/csv-rate-loader.port'; +} from '@domain/ports/in/search-csv-rates.port'; +import { CsvRateLoaderPort } from '@domain/ports/out/csv-rate-loader.port'; import { CsvRatePriceCalculatorService } from './csv-rate-price-calculator.service'; /** diff --git a/apps/backend/src/domain/services/port-search.service.ts b/apps/backend/src/domain/services/port-search.service.ts index fdaae78..35f0e08 100644 --- a/apps/backend/src/domain/services/port-search.service.ts +++ b/apps/backend/src/domain/services/port-search.service.ts @@ -15,8 +15,8 @@ import { PortSearchInput, PortSearchOutput, GetPortInput, -} from '../ports/in/get-ports.port'; -import { PortRepository } from '../ports/out/port.repository'; +} from '@domain/ports/in/get-ports.port'; +import { PortRepository } from '@domain/ports/out/port.repository'; import { PortNotFoundException } from '../exceptions/port-not-found.exception'; export class PortSearchService implements GetPortsPort { diff --git a/apps/backend/src/domain/services/rate-search.service.ts b/apps/backend/src/domain/services/rate-search.service.ts index 7dc759a..1396734 100644 --- a/apps/backend/src/domain/services/rate-search.service.ts +++ b/apps/backend/src/domain/services/rate-search.service.ts @@ -11,12 +11,12 @@ */ import { RateQuote } from '../entities/rate-quote.entity'; -import { SearchRatesPort, RateSearchInput, RateSearchOutput } from '../ports/in/search-rates.port'; -import { CarrierConnectorPort } from '../ports/out/carrier-connector.port'; -import { CachePort } from '../ports/out/cache.port'; -import { RateQuoteRepository } from '../ports/out/rate-quote.repository'; -import { PortRepository } from '../ports/out/port.repository'; -import { CarrierRepository } from '../ports/out/carrier.repository'; +import { SearchRatesPort, RateSearchInput, RateSearchOutput } from '@domain/ports/in/search-rates.port'; +import { CarrierConnectorPort } from '@domain/ports/out/carrier-connector.port'; +import { CachePort } from '@domain/ports/out/cache.port'; +import { RateQuoteRepository } from '@domain/ports/out/rate-quote.repository'; +import { PortRepository } from '@domain/ports/out/port.repository'; +import { CarrierRepository } from '@domain/ports/out/carrier.repository'; import { PortNotFoundException } from '../exceptions/port-not-found.exception'; import { v4 as uuidv4 } from 'uuid'; diff --git a/apps/backend/tsconfig.json b/apps/backend/tsconfig.json index 4feea10..856432a 100644 --- a/apps/backend/tsconfig.json +++ b/apps/backend/tsconfig.json @@ -9,7 +9,7 @@ "target": "ES2021", "sourceMap": true, "outDir": "./dist", - "baseUrl": "./src", + "baseUrl": ".", "incremental": true, "skipLibCheck": true, "strictNullChecks": true, @@ -23,9 +23,9 @@ "resolveJsonModule": true, "esModuleInterop": true, "paths": { - "@domain/*": ["domain/*"], - "@application/*": ["application/*"], - "@infrastructure/*": ["infrastructure/*"] + "@domain/*": ["src/domain/*"], + "@application/*": ["src/application/*"], + "@infrastructure/*": ["src/infrastructure/*"] } }, "include": ["src/**/*"],