import fsp from "fs/promises"; import axios from "axios"; import { rtsModel } from "../rts/rts.schema"; import { getChildren } from "../file/file.service"; import { getFileUrlS3 } from "../utils/s3"; import generateNote from "./ai"; import { createNote, createNoteBot } from "../note/note.service"; async function downloadFile(url: string, downloadPath: string) { try { const res = await axios({ url: url, method: "GET", responseType: "stream", }); await fsp.writeFile(downloadPath, res.data); } catch (err) { console.log(err); } } async function downloadFileTree( basePath: string, recId: string, tenantId: string ) { const rts = await rtsModel.findOne({ pid: recId }); async function downloadFolder(folderId: string, path: string) { const items = await getChildren(folderId, tenantId); for (const item of items) { if (item.mimeType == "folder") { const newPath = path + `/${item.name}`; await fsp.mkdir(newPath); await downloadFolder(item.pid, newPath); } else { await downloadFile( await getFileUrlS3(item.pid, null, false), path + `/${item.name}` ); } } } await downloadFolder(recId, basePath); } async function deleteFolder(path: string) { await fsp.rm(path, { recursive: true, force: true }); } export async function validate(recId: string, tenantId: string) { const basePath = process.env.BASE_PATH || "/root/tmp/quickerPermit"; const folderPath = basePath + `/${recId}`; try { await fsp.mkdir(folderPath); await downloadFileTree(folderPath, recId, tenantId); const files = await fsp.readdir(folderPath); const notes: { folder: string; note: string }[] = []; for (const file of files) { const filePath = folderPath + `/${file}`; const stats = await fsp.stat(filePath); if (stats.isDirectory()) { const note = await generateNote(filePath); notes.push({ folder: file, note }); } } let finalNote = ""; for (const note of notes) { finalNote += `${note.folder}\n`; finalNote += `${note.note}\n\n`; } await createNoteBot(finalNote, recId, tenantId); } catch (err) { console.log(err); } finally { deleteFolder(folderPath); } }