feat: auto-cleanup orphaned tags when removed from entries

Tags that are no longer associated with any entry are automatically
deleted from the database when a tag is removed from an entry.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Thomas Richter
2026-02-01 23:13:50 +01:00
parent b00d71956e
commit c92aec14d3
2 changed files with 13 additions and 0 deletions

View File

@@ -158,6 +158,7 @@ export interface TagRepository {
getById(id: string): Tag | undefined;
getByEntryId(entryId: string): Tag[];
updateEntryTags(entryId: string, tagNames: string[]): void;
cleanupOrphanedTags(): number;
}
class SQLiteTagRepository implements TagRepository {
@@ -215,6 +216,15 @@ class SQLiteTagRepository implements TagRepository {
db.insert(entryTags).values({ entryId, tagId: tag.id }).run();
}
}
cleanupOrphanedTags(): number {
// Delete tags that are not associated with any entry
const result = db.run(sql`
DELETE FROM tags
WHERE id NOT IN (SELECT DISTINCT tag_id FROM entry_tags)
`);
return result.changes;
}
}
export const tagRepository: TagRepository = new SQLiteTagRepository();