import { Module, Provider } from '@nestjs/common'; import { CqrsModule } from '@nestjs/cqrs'; import { DIRECTION_ENCODER, GEODESIC, GEOROUTER, PARAMS_PROVIDER, } from './geography.di-tokens'; import { DefaultParamsProvider } from './infrastructure/default-params-provider'; import { PostgresDirectionEncoder } from './infrastructure/postgres-direction-encoder'; import { GetBasicRouteController } from './interface/controllers/get-basic-route.controller'; import { RouteMapper } from './route.mapper'; import { Geodesic } from './infrastructure/geodesic'; import { GraphhopperGeorouter } from './infrastructure/graphhopper-georouter'; import { HttpModule } from '@nestjs/axios'; import { GetRouteQueryHandler } from './core/application/queries/get-route/get-route.query-handler'; const queryHandlers: Provider[] = [GetRouteQueryHandler]; const mappers: Provider[] = [RouteMapper]; const adapters: Provider[] = [ { provide: PARAMS_PROVIDER, useClass: DefaultParamsProvider, }, { provide: DIRECTION_ENCODER, useClass: PostgresDirectionEncoder, }, { provide: GEOROUTER, useClass: GraphhopperGeorouter, }, { provide: GEODESIC, useClass: Geodesic, }, GetBasicRouteController, ]; @Module({ imports: [CqrsModule, HttpModule], providers: [...queryHandlers, ...mappers, ...adapters], exports: [RouteMapper, DIRECTION_ENCODER, GetBasicRouteController], }) export class GeographyModule {}