UNPKG

@opengis/bi

Version:

BI data visualization module

48 lines (41 loc) 1.71 kB
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 }; } }