Private
Public Access
1
0

Add system board templates seeded at startup

Four templates (Kanban, Simple, Sprint, Bug Tracking) with tenantId=null
are auto-seeded on first startup if none exist. Available to all tenants
in the board creation dropdown.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Catherine Renelle
2026-02-26 07:33:08 -05:00
parent 9b5459fa49
commit 8a97d354fa
2 changed files with 43 additions and 1 deletions
+4 -1
View File
@@ -1,8 +1,11 @@
import type { Handle } from '@sveltejs/kit'; import type { Handle } from '@sveltejs/kit';
import { resolveTenant } from '$lib/server/tenant.js'; import { resolveTenant, seedSystemTemplates } from '$lib/server/tenant.js';
import { validateSession, sessionCookieName } from '$lib/server/auth.js'; import { validateSession, sessionCookieName } from '$lib/server/auth.js';
import { logger } from '$lib/server/logger.js'; import { logger } from '$lib/server/logger.js';
// One-time seed on startup
seedSystemTemplates().catch((e) => logger.error({ err: e }, 'Failed to seed system templates'));
export const handle: Handle = async ({ event, resolve }) => { export const handle: Handle = async ({ event, resolve }) => {
const start = Date.now(); const start = Date.now();
// 1. Resolve tenant from hostname // 1. Resolve tenant from hostname
+39
View File
@@ -103,3 +103,42 @@ function humanizeDomain(host: string): string {
export function clearTenantCache() { export function clearTenantCache() {
tenantCache.clear(); tenantCache.clear();
} }
// ─── System board templates (tenantId = null) ───────────────
const SYSTEM_TEMPLATES = [
{
name: 'Kanban',
description: 'Classic kanban workflow with backlog and review stages',
template: { columns: [{ title: 'Backlog' }, { title: 'To Do' }, { title: 'In Progress' }, { title: 'Review' }, { title: 'Done' }] }
},
{
name: 'Simple',
description: 'Minimal three-column board',
template: { columns: [{ title: 'To Do' }, { title: 'Doing' }, { title: 'Done' }] }
},
{
name: 'Sprint',
description: 'Agile sprint workflow with testing phase',
template: { columns: [{ title: 'Sprint Backlog' }, { title: 'In Progress' }, { title: 'Testing' }, { title: 'Done' }] }
},
{
name: 'Bug Tracking',
description: 'Issue lifecycle from report to resolution',
template: { columns: [{ title: 'Reported' }, { title: 'Triaging' }, { title: 'Fixing' }, { title: 'Verifying' }, { title: 'Closed' }] }
}
];
/** Seed system board templates if none exist. Call once at startup. */
export async function seedSystemTemplates() {
const count = await prisma.boardTemplate.count({ where: { tenantId: null } });
if (count > 0) return;
await prisma.boardTemplate.createMany({
data: SYSTEM_TEMPLATES.map((t) => ({
tenantId: null,
name: t.name,
description: t.description,
template: t.template
}))
});
}