import { db } from "./index"; import { adventureItems, adventureTemplates, spiritualConfig, userProgress, users, settings, } from "./schema"; const DEFAULT_PRAYER = [ "Morning", "Midday", "Evening", "Rosary", "Examen", ]; const DEFAULT_LITANIES = [ "Litany 1", "Litany 2", "Litany 3", "Litany 4", "Litany 5", "Litany 6", ]; function itemConfig( label: string, config: Record = {} ): Record { const semanticByLabel: Record = { Work: "work", Exercise: "exercise", Prayer: "prayer", Litanies: "litanies", Teaching: "teaching", "Class 1": "class", "Class 2": "class", }; const semanticKey = semanticByLabel[label]; return semanticKey ? { ...config, semanticKey } : config; } async function seed() { const existing = await db.select().from(users).limit(1); if (existing.length > 0) { console.log("User already exists, skipping seed."); return; } const [user] = await db .insert(users) .values({ displayName: "Traveler" }) .returning(); await db.insert(userProgress).values({ userId: user.id }); await db.insert(spiritualConfig).values({ userId: user.id, prayerLabels: DEFAULT_PRAYER, litanyLabels: DEFAULT_LITANIES, }); await db.insert(settings).values([ { userId: user.id, key: "weekly_reading_goal", value: 50 }, { userId: user.id, key: "notifications_enabled", value: false }, { userId: user.id, key: "sounds_enabled", value: false }, { userId: user.id, key: "theme", value: "minimal-dark" }, ]); const templates = [ { name: "Weekday", daysOfWeek: [1, 2, 3, 4, 5], isDefault: true, isSystem: true, sortPriority: 0, items: [ { type: "duration", label: "Work", config: itemConfig("Work", { targetHours: 7.5 }), sortOrder: 0 }, { type: "checkbox", label: "Exercise", config: itemConfig("Exercise"), sortOrder: 1 }, { type: "reading", label: "Read", config: {}, sortOrder: 2 }, { type: "timeblock", label: "Class 1", config: itemConfig("Class 1", { scheduledTime: "18:00" }), sortOrder: 3 }, { type: "timeblock", label: "Class 2", config: itemConfig("Class 2", { scheduledTime: "20:00" }), sortOrder: 4 }, { type: "checklist", label: "Prayer", config: itemConfig("Prayer", { checklistSize: 5 }), sortOrder: 5 }, { type: "checklist", label: "Litanies", config: itemConfig("Litanies", { checklistSize: 6 }), sortOrder: 6 }, { type: "note", label: "Notes", config: {}, sortOrder: 7 }, ], }, { name: "Saturday", daysOfWeek: [6], isDefault: false, isSystem: true, sortPriority: 0, items: [ { type: "checkbox", label: "Exercise", config: itemConfig("Exercise"), sortOrder: 0 }, { type: "reading", label: "Read", config: {}, sortOrder: 1 }, { type: "checklist", label: "Prayer", config: itemConfig("Prayer", { checklistSize: 5 }), sortOrder: 2 }, { type: "checklist", label: "Litanies", config: itemConfig("Litanies", { checklistSize: 6 }), sortOrder: 3 }, { type: "note", label: "Notes", config: {}, sortOrder: 4 }, ], }, { name: "Sunday", daysOfWeek: [0], isDefault: false, isSystem: true, sortPriority: 0, items: [ { type: "reading", label: "Read", config: {}, sortOrder: 0 }, { type: "checkbox", label: "Exercise", config: itemConfig("Exercise"), sortOrder: 1 }, { type: "checklist", label: "Prayer", config: itemConfig("Prayer", { checklistSize: 5 }), sortOrder: 2 }, { type: "checklist", label: "Litanies", config: itemConfig("Litanies", { checklistSize: 6 }), sortOrder: 3 }, { type: "note", label: "Notes", config: {}, sortOrder: 4 }, ], }, { name: "Teaching Day", daysOfWeek: [2, 4], isDefault: false, isSystem: true, sortPriority: 10, items: [ { type: "duration", label: "Work", config: { targetHours: 7.5 }, sortOrder: 0 }, { type: "checkbox", label: "Teaching", config: itemConfig("Teaching"), sortOrder: 1 }, { type: "checkbox", label: "Exercise", config: itemConfig("Exercise"), sortOrder: 2 }, { type: "reading", label: "Read", config: {}, sortOrder: 3 }, { type: "checklist", label: "Prayer", config: itemConfig("Prayer", { checklistSize: 5 }), sortOrder: 4 }, { type: "checklist", label: "Litanies", config: itemConfig("Litanies", { checklistSize: 6 }), sortOrder: 5 }, ], }, ]; for (const tpl of templates) { const [template] = await db .insert(adventureTemplates) .values({ userId: user.id, name: tpl.name, daysOfWeek: tpl.daysOfWeek, isDefault: tpl.isDefault, isSystem: tpl.isSystem, sortPriority: tpl.sortPriority, }) .returning(); for (const item of tpl.items) { await db.insert(adventureItems).values({ templateId: template.id, type: item.type, label: item.label, config: item.config, sortOrder: item.sortOrder, }); } } console.log("Seed complete. User ID:", user.id); } seed() .then(() => process.exit(0)) .catch((err) => { console.error(err); process.exit(1); });