W n8n attention vm

This commit is contained in:
alma 2025-05-24 20:39:52 +02:00
parent 97f1313a18
commit 880d22665e

View File

@ -209,28 +209,7 @@ export async function POST(request: Request) {
}, { status: 400 });
}
// Step 1: Upload logo to Minio if present
let logoPath = null;
if (body.logo?.data) {
try {
// Convert base64 to File object
const base64Data = body.logo.data.split(',')[1];
const buffer = Buffer.from(base64Data, 'base64');
const file = new File([buffer], body.logo.name || 'logo.png', { type: body.logo.type || 'image/png' });
// Upload logo
const { filePath } = await uploadMissionLogo(userId, 'temp', file);
logoPath = filePath;
uploadedFiles.push({ type: 'logo', path: filePath });
console.log('Logo uploaded successfully:', { logoPath });
} catch (uploadError) {
console.error('Error uploading logo:', uploadError);
throw new Error('Failed to upload logo');
}
}
// Step 2: Create mission in database with logo path
// Step 1: Create mission in database first
const missionData = {
name: body.name,
oddScope: body.oddScope,
@ -243,7 +222,7 @@ export async function POST(request: Request) {
profils: body.profils,
participation: body.participation,
creatorId: userId,
logo: logoPath,
logo: null, // Will update after upload
};
console.log('Creating mission with data:', JSON.stringify(missionData, null, 2));
@ -254,7 +233,34 @@ export async function POST(request: Request) {
console.log('Mission created successfully:', JSON.stringify(mission, null, 2));
// Handle attachments if present
// Step 2: Upload logo to Minio if present
let logoPath = null;
if (body.logo?.data) {
try {
// Convert base64 to File object
const base64Data = body.logo.data.split(',')[1];
const buffer = Buffer.from(base64Data, 'base64');
const file = new File([buffer], body.logo.name || 'logo.png', { type: body.logo.type || 'image/png' });
// Upload logo using the correct function
const { filePath } = await uploadMissionLogo(userId, mission.id, file);
logoPath = filePath;
uploadedFiles.push({ type: 'logo', path: filePath });
// Update mission with logo path
await prisma.mission.update({
where: { id: mission.id },
data: { logo: filePath }
});
console.log('Logo uploaded successfully:', { logoPath });
} catch (uploadError) {
console.error('Error uploading logo:', uploadError);
throw new Error('Failed to upload logo');
}
}
// Step 3: Handle attachments if present
if (body.attachments && body.attachments.length > 0) {
try {
const attachmentPromises = body.attachments.map(async (attachment: any) => {
@ -262,18 +268,18 @@ export async function POST(request: Request) {
const buffer = Buffer.from(base64Data, 'base64');
const file = new File([buffer], attachment.name || 'attachment', { type: attachment.type || 'application/octet-stream' });
// Upload attachment
const { filePath } = await uploadMissionLogo(userId, 'temp', file);
// Upload attachment using the correct function
const { filePath, filename, fileType, fileSize } = await uploadMissionAttachment(userId, mission.id, file);
uploadedFiles.push({ type: 'attachment', path: filePath });
// Create attachment record in database
// Create attachment record in database with final path
return prisma.attachment.create({
data: {
missionId: mission.id,
filename: attachment.name || 'attachment',
filePath: filePath,
fileType: attachment.type || 'application/octet-stream',
fileSize: buffer.length,
filename,
filePath,
fileType,
fileSize,
uploaderId: userId
}
});
@ -287,29 +293,7 @@ export async function POST(request: Request) {
}
}
// Move uploaded files to final location
try {
const movePromises = uploadedFiles.map(async (file) => {
const finalPath = file.path.replace('temp', mission.id);
await s3Client.send(new CopyObjectCommand({
Bucket: 'missions',
CopySource: `missions/${file.path}`,
Key: finalPath.replace('missions/', '')
}));
await s3Client.send(new DeleteObjectCommand({
Bucket: 'missions',
Key: file.path.replace('missions/', '')
}));
});
await Promise.all(movePromises);
console.log('All files moved to final location successfully');
} catch (moveError) {
console.error('Error moving files to final location:', moveError);
throw new Error('Failed to move files to final location');
}
// Only trigger n8n workflow after all Minio operations are complete
// Step 4: Trigger n8n workflow after all file operations are complete
try {
console.log('=== Starting N8N Workflow ===');
const n8nService = new N8nService();
@ -318,7 +302,7 @@ export async function POST(request: Request) {
const n8nData = {
...body,
creatorId: userId,
logoPath: logoPath ? logoPath.replace('temp', mission.id) : null,
logoPath: logoPath,
config: {
N8N_API_KEY: process.env.N8N_API_KEY,
MISSION_API_URL: process.env.NEXT_PUBLIC_API_URL