diff --git a/src/lib/server/db/repository.ts b/src/lib/server/db/repository.ts index e4dadee..c4715db 100644 --- a/src/lib/server/db/repository.ts +++ b/src/lib/server/db/repository.ts @@ -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(); diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts index 4539bb9..ea4f215 100644 --- a/src/routes/+page.server.ts +++ b/src/routes/+page.server.ts @@ -342,6 +342,9 @@ export const actions: Actions = { ); tagRepository.updateEntryTags(id, updatedTags); + // Clean up orphaned tags + tagRepository.cleanupOrphanedTags(); + return { success: true }; } };