53 lines
2.0 KiB
TypeScript
53 lines
2.0 KiB
TypeScript
'use server';
|
|
|
|
import { sendEmail } from '@/lib/mail/mailer';
|
|
import { getServerAppServices } from '@/lib/services/create-services.server';
|
|
|
|
export async function submitAnnotations(annotations: any[]) {
|
|
const services = getServerAppServices();
|
|
const logger = services.logger.child({ action: 'submitAnnotations' });
|
|
|
|
if (!annotations || annotations.length === 0) {
|
|
return { success: false, error: 'Keine Korrekturen vorhanden.' };
|
|
}
|
|
|
|
try {
|
|
const jsonContent = JSON.stringify(annotations, null, 2);
|
|
const htmlContent = `
|
|
<h2>Neue Website-Korrekturen (${annotations.length})</h2>
|
|
<p>Es wurden neue Korrekturen über den Annotator eingereicht.</p>
|
|
<ul>
|
|
${annotations.map(ann => `
|
|
<li>
|
|
<b>${new URL(ann.url).pathname}</b> [${ann.type}]<br />
|
|
Element: <code>${ann.selector}</code><br />
|
|
<i>${ann.type === 'image' ? 'Neues Bild: ' : 'Text: '}${ann.newContent}</i>
|
|
</li>
|
|
`).join('')}
|
|
</ul>
|
|
<p><i>Die genauen Daten (inkl. Scroll-Positionen, Viewport und Zeitstempel) befinden sich hier:</i></p>
|
|
<pre style="background: #f4f4f4; padding: 10px; border-radius: 5px; font-size: 12px; overflow-x: auto;">
|
|
${jsonContent}
|
|
</pre>
|
|
`;
|
|
|
|
const notificationResult = await sendEmail({
|
|
replyTo: 'info@e-tib.com', // Falls Rückfragen nötig
|
|
subject: `[Korrekturen] ${annotations.length} neue Anmerkungen für E-TIB`,
|
|
html: htmlContent
|
|
});
|
|
|
|
if (!notificationResult.success) {
|
|
logger.error('Annotation email FAILED', { error: notificationResult.error });
|
|
return { success: false, error: notificationResult.error };
|
|
}
|
|
|
|
logger.info('Annotation email sent successfully', { count: annotations.length });
|
|
return { success: true };
|
|
} catch (error) {
|
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
logger.error('Failed to send annotations', { error: errorMsg });
|
|
return { success: false, error: errorMsg };
|
|
}
|
|
}
|