diff --git a/src/db.ts b/src/db.ts index 253fed9..e1039dc 100644 --- a/src/db.ts +++ b/src/db.ts @@ -38,6 +38,7 @@ interface EventRow { created_at: number; tags: string; sig: string; + deleted_at: number | null; } interface EventFTSRow { diff --git a/src/db/migrations/013_soft_deletion.ts b/src/db/migrations/013_soft_deletion.ts new file mode 100644 index 0000000..3856ca0 --- /dev/null +++ b/src/db/migrations/013_soft_deletion.ts @@ -0,0 +1,9 @@ +import { Kysely } from '@/deps.ts'; + +export async function up(db: Kysely): Promise { + await db.schema.alterTable('events').addColumn('deleted_at', 'integer').execute(); +} + +export async function down(db: Kysely): Promise { + await db.schema.alterTable('events').dropColumn('deleted_at').execute(); +} diff --git a/src/storages/events-db.ts b/src/storages/events-db.ts index b5c8ee7..304f283 100644 --- a/src/storages/events-db.ts +++ b/src/storages/events-db.ts @@ -155,6 +155,7 @@ class EventsDB implements NStore { 'events.created_at', 'events.sig', ]) + .where('events.deleted_at', 'is', null) .orderBy('events.created_at', 'desc'); for (const [key, value] of Object.entries(filter)) { @@ -329,12 +330,9 @@ class EventsDB implements NStore { const query = this.getEventsQuery(filters).clearSelect().select('id'); - await db.deleteFrom('events_fts') - .where('id', 'in', () => query) - .execute(); - - return db.deleteFrom('events') + return await db.updateTable('events') .where('id', 'in', () => query) + .set({ deleted_at: Math.floor(Date.now() / 1000) }) .execute(); }