- AiStatus enum 'disabled' 추가 — settings.ai_enabled=false 일 때 새 노트의 초기 status.
- m005 migration: ai_status CHECK 제약을 ('pending','done','failed','disabled') 로 relax.
SQLite 가 ALTER COLUMN CHECK 미지원 → table recreate (notes_new INSERT SELECT DROP RENAME).
기존 인덱스 (idx_notes_created_at, idx_notes_ai_status, idx_notes_deleted_at) 재생성.
- SettingsService schema 에 ai_enabled / onboarding_completed (optional) 추가 +
isAiEnabled / setAiEnabled / isOnboardingCompleted / setOnboardingCompleted accessor.
기본 fallback (ai_enabled=true, onboarding_completed=false) — 기존 settings.json 무영향.
- NoteRepository.create 가 optional aiStatus 받도록 — 'pending' 외 값일 때 pending_jobs skip.
기존 caller (rawText 만 전달) 무영향.
- CaptureService deps 에 settings (좁은 AiEnabledSource 인터페이스) 추가.
submit() 가 ai_enabled 조회 → false 면 ai_status='disabled' insert + enqueue skip.
settings 미주입 시 기존 동작 (항상 enabled) 보존 — 테스트 케이스 무영향.
- main/index.ts wiring: settings: settingsSvc 주입.
Tests: 489 → 494 (CaptureService ai_enabled 2건 + m005 migration 3건). typecheck 0.
27 lines
808 B
TypeScript
27 lines
808 B
TypeScript
import type Database from 'better-sqlite3';
|
|
import * as m001 from './m001_initial.js';
|
|
import * as m002 from './m002_due_date.js';
|
|
import * as m003 from './m003_soft_delete.js';
|
|
import * as m004 from './m004_status.js';
|
|
import * as m005 from './m005_ai_disabled.js';
|
|
|
|
const migrations = [m001, m002, m003, m004, m005];
|
|
|
|
export function latestVersion(): number {
|
|
return migrations[migrations.length - 1]!.version;
|
|
}
|
|
|
|
export function runMigrations(db: Database.Database): void {
|
|
const row = db.prepare('PRAGMA user_version').get() as { user_version: number };
|
|
const current = row.user_version ?? 0;
|
|
for (const m of migrations) {
|
|
if (m.version > current) {
|
|
const tx = db.transaction(() => {
|
|
m.up(db);
|
|
db.pragma(`user_version = ${m.version}`);
|
|
});
|
|
tx();
|
|
}
|
|
}
|
|
}
|