fix: load persisted docs before module onInit to prevent re-seeding

Module onInit functions (rvote, rtasks, rcal, etc.) call seedDemoIfEmpty
which checks the sync server for existing docs. Previously onInit ran
as an IIFE before loadAllDocs completed, so it always found empty docs
and re-seeded demo data — overwriting user deletions/changes. Now
onInit runs inside the loadAllDocs .then() chain, ensuring persisted
data is loaded before any seed checks run.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-04-04 04:05:51 +00:00
parent df8901c975
commit 7f98dfcdb1
1 changed files with 22 additions and 20 deletions

View File

@ -3992,8 +3992,19 @@ const server = Bun.serve<WSData>({
// ── Startup ── // ── Startup ──
// Call onInit for each module that defines it (schema registration, DB init, etc.) // Ensure generated files directory exists
(async () => { import { mkdirSync } from "node:fs";
try { mkdirSync(resolve(process.env.FILES_DIR || "./data/files", "generated"), { recursive: true }); } catch {}
import { initTokenService, seedCUSDC } from "./token-service";
// IMPORTANT: Load persisted docs FIRST, then run module onInit + seeding.
// Previously onInit ran before loadAllDocs, causing seed functions to see
// empty docs and re-create demo data that users had already deleted.
ensureDemoCommunity().then(() => console.log("[Demo] Demo community ready")).catch((e) => console.error("[Demo] Failed:", e));
loadAllDocs(syncServer)
.then(async () => {
// Now that persisted docs are loaded, init modules (which may seed)
for (const mod of getAllModules()) { for (const mod of getAllModules()) {
if (mod.onInit) { if (mod.onInit) {
try { try {
@ -4009,16 +4020,7 @@ const server = Bun.serve<WSData>({
setGoogleOAuthSyncServer(syncServer); setGoogleOAuthSyncServer(syncServer);
setClickUpOAuthSyncServer(syncServer); setClickUpOAuthSyncServer(syncServer);
setOAuthStatusSyncServer(syncServer); setOAuthStatusSyncServer(syncServer);
})();
// Ensure generated files directory exists
import { mkdirSync } from "node:fs";
try { mkdirSync(resolve(process.env.FILES_DIR || "./data/files", "generated"), { recursive: true }); } catch {}
ensureDemoCommunity().then(() => console.log("[Demo] Demo community ready")).catch((e) => console.error("[Demo] Failed:", e));
import { initTokenService, seedCUSDC } from "./token-service";
loadAllDocs(syncServer)
.then(async () => {
// Seed all modules' demo data so /demo routes always have content // Seed all modules' demo data so /demo routes always have content
for (const mod of getAllModules()) { for (const mod of getAllModules()) {
if (mod.seedTemplate) { if (mod.seedTemplate) {