Fix: SKRIFT_VERSAND_TOKEN in Directus-Container durchreichen + FTP-Fehler voll ausgeben
- docker-compose.yml (directus): SKRIFT_VERSAND_TOKEN: ${SKRIFT_VERSAND_TOKEN}
ergaenzt. Ohne diese Zeile landete der .env-Wert nie im Container -> die
Versand-Seite blieb 404.
- Board FTP-Upload: gesamten Fehler ausgeben (nicht gekuerzt), leere Auswahl
klar melden, 90s-Timeout gegen Haengen, console-Log. Proxy /batch-build
kuerzt den Fehler nicht mehr auf 300 Zeichen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -81,6 +81,9 @@ services:
|
||||
SKRIFT_BACKEND_TOKEN: ${SKRIFT_BACKEND_TOKEN}
|
||||
SKRIFT_PREVIEW_LIMIT: ${SKRIFT_PREVIEW_LIMIT:-10}
|
||||
SKRIFT_TEAM_EMAIL: ${SKRIFT_TEAM_EMAIL:-hello@skrift.de}
|
||||
# Geheimer Pfad-Token der oeffentlichen Versand-Bestaetigungsseite
|
||||
# (/v1/versand/<TOKEN>). Ohne Wert ist die Seite aus (404).
|
||||
SKRIFT_VERSAND_TOKEN: ${SKRIFT_VERSAND_TOKEN}
|
||||
|
||||
# Shared Secret für den WordPress-Webhook (JetFormBuilder → /skrift-orders/inbound/*).
|
||||
# Muss identisch als ?token=... in der Webhook-URL stehen.
|
||||
|
||||
@@ -1381,10 +1381,10 @@ const handler = (router, { services, getSchema, logger }) => {
|
||||
});
|
||||
const txt = await r.text();
|
||||
let data = null; try { data = txt ? JSON.parse(txt) : null; } catch { /* egal */ }
|
||||
if (!r.ok) return res.status(502).json({ error: 'Bündelung fehlgeschlagen.', detail: (data && data.message) || String(txt).slice(0, 300) });
|
||||
if (!r.ok) return res.status(502).json({ error: 'Bündelung fehlgeschlagen.', detail: (data && (data.message || data.error)) || String(txt).slice(0, 2000) });
|
||||
return res.json(data || { ok: true });
|
||||
} catch (e) {
|
||||
return res.status(500).json({ error: 'Backend nicht erreichbar.', detail: String(e.message || e).slice(0, 300) });
|
||||
return res.status(500).json({ error: 'Backend nicht erreichbar.', detail: String(e.message || e).slice(0, 2000) });
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -990,18 +990,29 @@ const Board = defineComponent({
|
||||
async function batchFtp() {
|
||||
const ids = [...batchAuswahl.value];
|
||||
if (!ids.length || batchBusy.value) return;
|
||||
batchBusy.value = 'ftp'; fehler.value = '';
|
||||
batchBusy.value = 'ftp'; fehler.value = ''; meldung.value = '';
|
||||
try {
|
||||
const res = await api.post('/skrift-orders/batch-build', { ids });
|
||||
const bundles = res.data?.bundles || [];
|
||||
const res = await api.post('/skrift-orders/batch-build', { ids }, { timeout: 90000 });
|
||||
const data = res?.data || {};
|
||||
const bundles = Array.isArray(data.bundles) ? data.bundles : [];
|
||||
try { console.log('[batch-ftp] Antwort:', JSON.stringify(data)); } catch { /* egal */ }
|
||||
const errs = bundles.filter((b) => b.error);
|
||||
const total = bundles.reduce((s, b) => s + (b.count || 0), 0);
|
||||
const total = bundles.reduce((s, b) => s + (Number(b.count) || 0), 0);
|
||||
const files = bundles.filter((b) => b.file).map((b) => b.file).join(', ');
|
||||
if (errs.length) fehler.value = `FTP: ${errs.map((e) => e.error).join('; ')}`;
|
||||
else { flash(`✓ ${total} Übermittlung(en) per FTP hochgeladen${files ? ` → ${files}.{xlsx,pdf}` : ''}.`); batchAuswahlLeeren(); }
|
||||
if (errs.length) {
|
||||
// Gesamten Fehler ausgeben (nicht gekürzt).
|
||||
fehler.value = 'FTP-Fehler: ' + errs.map((e) => `${e.client_id != null ? '#' + e.client_id + ' – ' : ''}${e.error}`).join(' | ');
|
||||
} else if (!bundles.length || total === 0) {
|
||||
fehler.value = 'Nichts hochgeladen – in der Auswahl ist keine Druck-PDF (nur PDF-Übermittlungen werden per FTP gebündelt, Text nicht).';
|
||||
} else {
|
||||
flash(`✓ ${total} Übermittlung(en) per FTP hochgeladen${files ? ` → ${files}.{xlsx,pdf}` : ''}.`);
|
||||
batchAuswahlLeeren();
|
||||
}
|
||||
await laden();
|
||||
} catch (e) {
|
||||
fehler.value = e?.response?.data?.detail || e?.response?.data?.error || e?.message || 'FTP-Upload fehlgeschlagen.';
|
||||
const d = e?.response?.data;
|
||||
fehler.value = 'FTP-Upload fehlgeschlagen: ' + (d?.detail || d?.error || e?.message || String(e));
|
||||
try { console.error('[batch-ftp] Fehler:', e?.response?.data || e); } catch { /* egal */ }
|
||||
} finally { batchBusy.value = ''; }
|
||||
}
|
||||
// Gruppen (Tag/Kunde): Aufklappen + Kopf-Auswahl.
|
||||
|
||||
Reference in New Issue
Block a user