* Refactor backend folder structure Co-authored-by: Charles Bochet <charles@twenty.com> * fix tests * fix * move yoga hooks --------- Co-authored-by: Charles Bochet <charles@twenty.com>
57 lines
1.2 KiB
TypeScript
57 lines
1.2 KiB
TypeScript
export const valuesStringForBatchRawQuery = (
|
|
values: {
|
|
[key: string]: any;
|
|
}[],
|
|
typesArray: string[] = [],
|
|
) => {
|
|
const castedValues = values.reduce((acc, _, rowIndex) => {
|
|
const numberOfColumns = typesArray.length;
|
|
|
|
const rowValues = Array.from(
|
|
{ length: numberOfColumns },
|
|
(_, columnIndex) => {
|
|
const placeholder = `$${rowIndex * numberOfColumns + columnIndex + 1}`;
|
|
const typeCast = typesArray[columnIndex]
|
|
? `::${typesArray[columnIndex]}`
|
|
: '';
|
|
|
|
return `${placeholder}${typeCast}`;
|
|
},
|
|
).join(', ');
|
|
|
|
acc.push(`(${rowValues})`);
|
|
|
|
return acc;
|
|
}, [] as string[]);
|
|
|
|
return castedValues.join(', ');
|
|
};
|
|
|
|
export const getFlattenedValuesAndValuesStringForBatchRawQuery = (
|
|
values: {
|
|
[key: string]: any;
|
|
}[],
|
|
keyTypeMap: {
|
|
[key: string]: string;
|
|
},
|
|
): {
|
|
flattenedValues: any[];
|
|
valuesString: string;
|
|
} => {
|
|
const keysToInsert = Object.keys(keyTypeMap);
|
|
|
|
const flattenedValues = values.flatMap((value) =>
|
|
keysToInsert.map((key) => value[key]),
|
|
);
|
|
|
|
const valuesString = valuesStringForBatchRawQuery(
|
|
values,
|
|
Object.values(keyTypeMap),
|
|
);
|
|
|
|
return {
|
|
flattenedValues,
|
|
valuesString,
|
|
};
|
|
};
|