fix: make sure tour.startDate is given in UTC

This commit is contained in:
Marcel Arndt 2025-06-12 17:45:59 +02:00
parent 0fa97c53b1
commit 1996ab31d5
2 changed files with 19 additions and 4 deletions

View File

@ -1,5 +1,5 @@
import { parse, parseISO } from 'date-fns'; import { parse, parseISO, subMilliseconds } from 'date-fns';
import { fromZonedTime } from 'date-fns-tz'; import { fromZonedTime, getTimezoneOffset } from 'date-fns-tz';
export const parseDateTime = (format: string) => (value: string) => export const parseDateTime = (format: string) => (value: string) =>
!!value ? parse(value, format, new Date()) : value; !!value ? parse(value, format, new Date()) : value;
@ -11,6 +11,12 @@ export const parseZonedDateTime =
export const parseCETDateTime = parseZonedDateTime('Europe/Berlin'); export const parseCETDateTime = parseZonedDateTime('Europe/Berlin');
export const subTimeZone = (value: string) =>
subMilliseconds(
new Date(value),
getTimezoneOffset('Europe/Berlin', new Date(value)),
);
export const parseInteger = (value = '') => parseInt(value); export const parseInteger = (value = '') => parseInt(value);
export const parseFloat = (value = '') => export const parseFloat = (value = '') =>

View File

@ -1,5 +1,5 @@
import { TourSource } from '@prisma/client'; import { TourSource } from '@prisma/client';
import { fakerDE as faker } from '@faker-js/faker'; import { isAfter } from 'date-fns';
import { TourPreStaging } from '../staging.interface'; import { TourPreStaging } from '../staging.interface';
import { import {
parseBoolean, parseBoolean,
@ -9,6 +9,7 @@ import {
parseInteger, parseInteger,
parseIsoDateTime, parseIsoDateTime,
pick, pick,
subTimeZone,
transformProperties, transformProperties,
} from '../transformer.functions'; } from '../transformer.functions';
@ -30,7 +31,15 @@ export class TourTransformer {
...transformProperties(parseFloat)( ...transformProperties(parseFloat)(
pick(['besetztKm', 'gesamtPreis'])(tourSource), pick(['besetztKm', 'gesamtPreis'])(tourSource),
), ),
...transformProperties(parseIsoDateTime)(pick(['date_iso'])(tourSource)), //! DispoLive changed date_iso from beeing UTC to local time, which in our case is CET
...(isAfter(
new Date(tourSource.date_iso),
new Date('2024-10-28T00:00:00.000Z'),
)
? transformProperties(subTimeZone)(pick(['date_iso'])(tourSource))
: transformProperties(parseIsoDateTime)(
pick(['date_iso'])(tourSource),
)),
...(tourSource.abrDate ...(tourSource.abrDate
? transformProperties(parseDateTime('yyyy-MM-dd'))( ? transformProperties(parseDateTime('yyyy-MM-dd'))(
pick(['abrDate'])(tourSource), pick(['abrDate'])(tourSource),