@websolutespa/payload-plugin-bowl-llm
Version:
LLM plugin for Bowl PayloadCms plugin
74 lines (73 loc) • 2.58 kB
JavaScript
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