feat(v0211): rebuildFtsTagsForNote 헬퍼 + tags 변경 path 통합 (single write)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -161,6 +161,7 @@ export class NoteRepository {
|
||||
linkTag.run(id, tagRow.id);
|
||||
}
|
||||
this.db.prepare(`DELETE FROM pending_jobs WHERE note_id=?`).run(id);
|
||||
this.rebuildFtsTagsForNote(id);
|
||||
});
|
||||
tx();
|
||||
}
|
||||
@@ -390,6 +391,7 @@ export class NoteRepository {
|
||||
const row = getOrInsert.get(t) as { id: number };
|
||||
link.run(id, row.id);
|
||||
}
|
||||
this.rebuildFtsTagsForNote(id);
|
||||
}
|
||||
});
|
||||
tx();
|
||||
@@ -851,6 +853,23 @@ export class NoteRepository {
|
||||
.run(nextRunAt, lastError.slice(0, 500), noteId);
|
||||
}
|
||||
|
||||
/**
|
||||
* v0.2.11 Cut D — note_tags 변경 후 notes_fts.tags 컬럼 (csv) 재구성.
|
||||
* 단일 write path 패턴: tags 변경하는 모든 메서드가 같은 transaction 끝에서 호출.
|
||||
*/
|
||||
private rebuildFtsTagsForNote(noteId: string): void {
|
||||
const row = this.db
|
||||
.prepare(
|
||||
`SELECT COALESCE(GROUP_CONCAT(t.name, ' '), '') AS csv
|
||||
FROM note_tags nt JOIN tags t ON t.id = nt.tag_id
|
||||
WHERE nt.note_id = ?`
|
||||
)
|
||||
.get(noteId) as { csv: string };
|
||||
this.db
|
||||
.prepare(`UPDATE notes_fts SET tags = ? WHERE note_id = ?`)
|
||||
.run(row.csv, noteId);
|
||||
}
|
||||
|
||||
private hydrate(row: Record<string, unknown>): Note {
|
||||
const tags = this.db
|
||||
.prepare(
|
||||
|
||||
Reference in New Issue
Block a user