import { createMap, forMember, mapFrom, Mapper } from '@automapper/core'; import { AutomapperProfile, InjectMapper } from '@automapper/nestjs'; import { Injectable } from '@nestjs/common'; import { Ad } from '../domain/entities/ad'; import { AdPresenter } from '../adapters/primaries/ad.presenter'; import { CreateAdRequest } from '../domain/dtos/create-ad.request'; import { Coordinates } from '../../geography/domain/entities/coordinates'; import moment from 'moment-timezone'; @Injectable() export class AdProfile extends AutomapperProfile { constructor(@InjectMapper() mapper: Mapper) { super(mapper); } override get profile() { return (mapper: any) => { createMap(mapper, Ad, AdPresenter); createMap( mapper, CreateAdRequest, CreateAdRequest, forMember( (dest) => dest.waypoints, mapFrom((source) => source.waypoints.map( (waypoint) => new Coordinates( waypoint.lon ?? undefined, waypoint.lat ?? undefined, ), ), ), ), ); createMap( mapper, CreateAdRequest, Ad, forMember( (dest) => dest.fromDate, mapFrom((source) => new Date(source.fromDate)), ), forMember( (dest) => dest.toDate, mapFrom((source) => new Date(source.toDate)), ), forMember( (dest) => dest.createdAt, mapFrom((source) => new Date(source.createdAt)), ), forMember( (dest) => dest.updatedAt, mapFrom((source) => new Date(source.updatedAt)), ), // forMember( // (dest) => dest.monTime, // mapFrom((source) => // source.monTime // ? new Date( // moment // .tz(`${source.fromDate} ${source.monTime}`, source.timezone) // .format(), // ) // : undefined, // ), // ), ); }; } }