UNPKG

@websolutespa/payload-plugin-bowl-llm

Version:

LLM plugin for Bowl PayloadCms plugin

74 lines (73 loc) 2.58 kB
import { ResponseSuccess } from '@websolutespa/payload-utils/server'; import { options } from '../options'; import { errorHandler } from './error.handler'; export const bulkKbUploadHandler = async (req)=>{ try { const { llmApp, appTool } = req.data; if (!llmApp) { throw { status: 400, message: 'Bad Request: llmApp is required' }; } // Access files from the request - Payload uses express-fileupload const reqFiles = req.files; if (!reqFiles || Object.keys(reqFiles).length === 0) { throw { status: 400, message: 'Bad Request: No files uploaded' }; } // req.files.files can be a single file or an array of files const rawFiles = reqFiles.files; const files = Array.isArray(rawFiles) ? rawFiles : [ rawFiles ]; const results = []; for (const file of files){ try { const doc = await req.payload.create({ collection: options.slug.llmKbFile, data: { isActive: true, llmApp: llmApp, ...appTool ? { appTool } : {} }, overrideAccess: true, file: { data: file.data, mimetype: file.mimetype, name: file.name, size: file.size } }); results.push({ filename: file.name, success: true, id: String(doc.id) }); } catch (fileError) { results.push({ filename: file.name, success: false, error: fileError.message || 'Unknown error' }); } } const allSucceeded = results.every((r)=>r.success); const status = allSucceeded ? 200 : 207; // 207 Multi-Status if some failed return ResponseSuccess({ results, totalFiles: files.length, successCount: results.filter((r)=>r.success).length, errorCount: results.filter((r)=>!r.success).length }, { status }); } catch (error) { return errorHandler(error); } }; //# sourceMappingURL=bulkKbUpload.handler.js.map