feat: backfill thumbnails for existing image attachments on first startup

One-time async migration runs after server is listening — generates 800px
WebP thumbnails for all existing image attachments that lack one. Gated by
a persistent flag in instance_settings so it never re-runs.
This commit is contained in:
Jannis Braun
2026-03-13 17:07:29 +01:00
parent 3e97c2b0f5
commit d3101c4ba4
2 changed files with 66 additions and 1 deletions
+7 -1
View File
@@ -5,8 +5,9 @@ import websocket from '@fastify/websocket';
import multipart from '@fastify/multipart';
import fastifyStatic from '@fastify/static';
import { config } from './config.js';
import { getDb } from './db/index.js';
import { getDb, getRawDb } from './db/index.js';
import { seedDatabase } from './db/seed.js';
import { backfillThumbnails } from './db/migrate.js';
import { authRoutes } from './routes/auth.js';
import { userRoutes } from './routes/users.js';
import { spaceRoutes } from './routes/spaces.js';
@@ -111,6 +112,11 @@ async function main(): Promise<void> {
process.exit(1);
}
// Fire-and-forget: backfill thumbnails for existing images (runs once)
backfillThumbnails(getRawDb(), config.uploadDir).catch(err => {
console.error('Thumbnail backfill failed (non-fatal):', err);
});
const shutdown = async () => {
console.log('Shutting down...');
await app.close();