f5cbcdf4d1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XNQ8ghPfzAfsyVYd6HgFb6
25 lines
1.1 KiB
TypeScript
25 lines
1.1 KiB
TypeScript
import { runMigrations } from './db';
|
|
import { ensureBucket } from './storage';
|
|
import { seed } from './seed';
|
|
import { startImageWorker } from '../worker';
|
|
|
|
let started: Promise<void> | null = null;
|
|
|
|
/** Einmalige Server-Initialisierung (idempotent, beim ersten Request ausgelöst). */
|
|
export function ensureInit(): Promise<void> {
|
|
if (!started) {
|
|
started = (async () => {
|
|
await runMigrations();
|
|
try { await ensureBucket(); } catch (e) { console.error('[init] S3 nicht bereit:', e); }
|
|
await seed();
|
|
try { await startImageWorker(); } catch (e) { console.error('[init] Worker-Start fehlgeschlagen:', e); }
|
|
try { const { setupTelegram } = await import('./telegram'); await setupTelegram(); }
|
|
catch (e) { console.error('[init] Telegram-Setup fehlgeschlagen:', e); }
|
|
try { const { startMaintenance } = await import('./maintenance'); startMaintenance(); }
|
|
catch (e) { console.error('[init] Wartung-Start fehlgeschlagen:', e); }
|
|
console.log('[init] Klarbild bereit.');
|
|
})().catch((e) => { started = null; throw e; });
|
|
}
|
|
return started;
|
|
}
|