@opengis/bi
Version:
BI data visualization module
48 lines (41 loc) • 1.71 kB
JavaScript
import path from 'path';
import {
mkdir, readFile, writeFile,
} from 'fs/promises';
import { logger, grpc } from '@opengis/fastify-table/utils.js';
const { jsonToXls } = grpc();
export default async function convertJSONToXls({
filepathJSON, colmodel, domain, source, send = () => { },
}) {
if (!filepathJSON) return null;
const rows = JSON.parse(await readFile(filepathJSON) || '{}');
if (!rows?.length) {
return { message: 'empty rows', status: 400 };
}
send('Конвертація файлу...');
try {
const { result } = await jsonToXls({
json: JSON.stringify(rows),
header: source,
subheader: `Завантажено з порталу ${domain} - ${new Date().toLocaleDateString()}. Всього: ${rows.length}`,
colmodel: JSON.stringify(colmodel),
});
send('Конвертація успішно завершена. Формування файлу...');
await mkdir(path.dirname(filepathJSON), { recursive: true });
await writeFile(filepathJSON.replace('.json', '.xlsx'), result, 'base64');
send('Файл успішно сформовано. Оновіть сторінку або натисніть кнопку ще раз для завантаження. ', 1);
return { message: 'Файл успішно сформовано. Натистіть кнопку ще раз для завантаження даних', status: 200 };
}
catch (err) {
send(`jsonToXLS err: ${err.toString()}`, 1);
logger.error({
name: 'export/table',
filepathJSON,
colmodel,
domain,
rows: rows.length,
error: err.toString(),
});
return { error: err.toString(), status: 500 };
}
}