xpeditis2.0/apps/backend/src/application/rates/rates.module.ts
David 8877265526 feat(blog): Phase 3 GEO/IA, corbeille, duplication, drag&drop, recadrage
- Bloc GEO/IA (resume IA, FAQ, points cles, entites) + rendu public
  "En bref"/"A retenir"/FAQ + JSON-LD Article & FAQPage.
- Corbeille: soft-delete (deleted_at), filtres Tous/Publies/Brouillons/
  Planifies/Corbeille, restauration + suppression definitive.
- Duplication d'un article (nouveau brouillon, slug unique).
- Drag & drop de l'image de couverture.
- Recadrage auto de la couverture en 16:9 (sharp) via endpoint dedie
  /admin/blog/cover-images.
- Migration AddGeoAndTrashToBlogPosts (ai_summary, faq, key_takeaways,
  ai_entities, deleted_at). Ajout dependance sharp.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 13:44:35 +02:00

69 lines
2.6 KiB
TypeScript

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { RatesController } from '../controllers/rates.controller';
import { CacheModule } from '../../infrastructure/cache/cache.module';
import { CarrierModule } from '../../infrastructure/carriers/carrier.module';
import { CsvRateModule } from '../../infrastructure/carriers/csv-loader/csv-rate.module';
// Import domain services
import { RateSearchService } from '@domain/services/rate-search.service';
// Import domain ports
import { RATE_QUOTE_REPOSITORY } from '@domain/ports/out/rate-quote.repository';
import { PORT_REPOSITORY } from '@domain/ports/out/port.repository';
import { CARRIER_REPOSITORY } from '@domain/ports/out/carrier.repository';
import { CACHE_PORT } from '@domain/ports/out/cache.port';
// Import infrastructure implementations
import { TypeOrmRateQuoteRepository } from '../../infrastructure/persistence/typeorm/repositories/typeorm-rate-quote.repository';
import { TypeOrmPortRepository } from '../../infrastructure/persistence/typeorm/repositories/typeorm-port.repository';
import { TypeOrmCarrierRepository } from '../../infrastructure/persistence/typeorm/repositories/typeorm-carrier.repository';
import { RateQuoteOrmEntity } from '../../infrastructure/persistence/typeorm/entities/rate-quote.orm-entity';
import { PortOrmEntity } from '../../infrastructure/persistence/typeorm/entities/port.orm-entity';
import { CarrierOrmEntity } from '../../infrastructure/persistence/typeorm/entities/carrier.orm-entity';
@Module({
imports: [
CacheModule,
CarrierModule,
CsvRateModule, // Import CSV rate module for CSV search service
TypeOrmModule.forFeature([RateQuoteOrmEntity, PortOrmEntity, CarrierOrmEntity]),
],
controllers: [RatesController],
providers: [
{
provide: RATE_QUOTE_REPOSITORY,
useClass: TypeOrmRateQuoteRepository,
},
{
provide: PORT_REPOSITORY,
useClass: TypeOrmPortRepository,
},
{
provide: CARRIER_REPOSITORY,
useClass: TypeOrmCarrierRepository,
},
{
provide: RateSearchService,
useFactory: (
connectors: any[],
cache: any,
rateQuoteRepo: any,
portRepo: any,
carrierRepo: any
) => {
return new RateSearchService(connectors, cache, rateQuoteRepo, portRepo, carrierRepo);
},
inject: [
'CarrierConnectors',
CACHE_PORT,
RATE_QUOTE_REPOSITORY,
PORT_REPOSITORY,
CARRIER_REPOSITORY,
],
},
],
exports: [RATE_QUOTE_REPOSITORY, RateSearchService],
})
export class RatesModule {}