From 721c6c8fe7ce32a523c4911beea89f9849acfc0f Mon Sep 17 00:00:00 2001 From: Leonardo Viva Date: Thu, 7 Mar 2024 18:02:59 -0300 Subject: [PATCH] fix: exports format dates string --- src/imports/data/data.js | 9 ++++++--- src/imports/data/dateParser/index.ts | 26 +++++++++++++++----------- src/imports/data/export.ts | 7 +++++-- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/imports/data/data.js b/src/imports/data/data.js index 8258d261..15108903 100644 --- a/src/imports/data/data.js +++ b/src/imports/data/data.js @@ -81,12 +81,13 @@ export async function getNextUserFromQueue({ authTokenId, document, queueId, con * @param {boolean} [payload.getTotal=false] * @param {'true'} [payload.withDetailFields] * @param {import('../model/User').User} [payload.contextUser] + * @param {boolean} [payload.transformDatesToString=true] * @param {import('@opentelemetry/api').Span} [payload.tracingSpan] * * @returns {Promise>} - Konecty result */ -export async function find({ authTokenId, document, displayName, displayType, fields, filter, sort, limit, start, getTotal, withDetailFields, contextUser, tracingSpan }) { +export async function find({ authTokenId, document, displayName, displayType, fields, filter, sort, limit, start, getTotal, withDetailFields, contextUser, transformDatesToString = true, tracingSpan }) { try { tracingSpan?.setAttribute('document', document); @@ -296,11 +297,13 @@ export async function find({ authTokenId, document, displayName, displayType, fi }); } - result.data = result.data.map(dateToString); + if (transformDatesToString) { + result.data = result.data.map(dateToString); + } return result; } catch (error) { - tracingSpan?.setAttributes("error", error.message); + tracingSpan?.setAttribute("error", error.message); logger.error(error, `Error executing query: ${error.message}`); return { diff --git a/src/imports/data/dateParser/index.ts b/src/imports/data/dateParser/index.ts index eb483a87..3f529632 100644 --- a/src/imports/data/dateParser/index.ts +++ b/src/imports/data/dateParser/index.ts @@ -1,44 +1,48 @@ import { DateTime } from 'luxon'; -import isObject from 'lodash/isObject'; -import isFunction from 'lodash/isFunction'; -import reduce from 'lodash/reduce'; -import isDate from 'lodash/isDate'; import isArray from 'lodash/isArray'; +import isDate from 'lodash/isDate'; +import isFunction from 'lodash/isFunction'; +import isObject from 'lodash/isPlainObject'; import isString from 'lodash/isString'; import map from 'lodash/map'; +import reduce from 'lodash/reduce'; type RecordObject = { toHexString?: () => string; }; -export function dateToString(record: any): string | Array | object { +type TransformFn = (date: DateTime) => string; + +export function dateToString | object>(record: any, transformFn?: TransformFn): ReturnT { if (isObject(record)) { const typedRecord = record as RecordObject; if (isFunction(typedRecord.toHexString)) { - return typedRecord.toHexString(); + return typedRecord.toHexString() as ReturnT; } + const transformToString = isFunction(transformFn) ? transformFn : (date: DateTime) => date.toISO(); + return reduce( typedRecord, (acc, value, key) => { if (isDate(value)) { return { ...acc, - [key]: DateTime.fromJSDate(value).toISO(), + [key]: transformToString(DateTime.fromJSDate(value)), }; } if (isArray(value)) { return { ...acc, - [key]: map(value, dateToString), + [key]: map(value, v => dateToString(v, transformFn)), }; } if (isObject(value)) { return { ...acc, - [key]: dateToString(value), + [key]: dateToString(value, transformFn), }; } return { @@ -47,9 +51,9 @@ export function dateToString(record: any): string | Array | object { }; }, {}, - ); + ) as ReturnT; } else if (isArray(record)) { - return map(record, dateToString); + return map(record, v => dateToString(v, transformFn)) as ReturnT; } else { return record; } diff --git a/src/imports/data/export.ts b/src/imports/data/export.ts index 42276941..c60ee93d 100644 --- a/src/imports/data/export.ts +++ b/src/imports/data/export.ts @@ -15,6 +15,7 @@ import { xlsExport } from '@imports/exports/xlsExport'; import { List } from '@imports/model/List'; import { User } from '@imports/model/User'; import { KonectyResult } from '@imports/types/result'; +import { dateToString } from './dateParser'; type ExportDataParams = { document: string; @@ -113,7 +114,8 @@ export default async function exportData({ document, listName, type = 'csv', use limit: query.limit, start: query.start, withDetailFields: 'true', - getTotal: true, + getTotal: false, + transformDatesToString: false, tracingSpan, }); @@ -125,8 +127,9 @@ export default async function exportData({ document, listName, type = 'csv', use const dataResult = result.data.reduce( (acc: { flatData: object[]; keys: Record }, item) => { const flatItem = flatten(item); + const transformed = dateToString(flatItem, date => date.toFormat('dd/MM/yyyy HH:mm:ss')); - acc.flatData.push(flatItem); + acc.flatData.push(transformed); Object.keys(flatItem as object).forEach(key => (acc.keys[key] = 1)); return acc;