From e4086fecfff05184c8eb4f7a06b8385d58d4d6af Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Sat, 25 Apr 2026 21:22:25 +0200 Subject: [PATCH] feat(db): add relay_message_id column to friend_requests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nullable indexed column tracking the entityId of the originating relay event for federated friend requests. Used by the rollback hook in federationRollback.ts to locate and delete rows when a federated friend_request_create is permanently rejected (spec ยง5). --- packages/server/drizzle/0001_complex_screwball.sql | 2 ++ packages/server/src/db/schema.ts | 2 ++ 2 files changed, 4 insertions(+) create mode 100644 packages/server/drizzle/0001_complex_screwball.sql diff --git a/packages/server/drizzle/0001_complex_screwball.sql b/packages/server/drizzle/0001_complex_screwball.sql new file mode 100644 index 00000000..52805603 --- /dev/null +++ b/packages/server/drizzle/0001_complex_screwball.sql @@ -0,0 +1,2 @@ +ALTER TABLE `friend_requests` ADD `relay_message_id` text;--> statement-breakpoint +CREATE INDEX `idx_friend_requests_relay_message_id` ON `friend_requests` (`relay_message_id`); \ No newline at end of file diff --git a/packages/server/src/db/schema.ts b/packages/server/src/db/schema.ts index 18d92291..b2f18154 100644 --- a/packages/server/src/db/schema.ts +++ b/packages/server/src/db/schema.ts @@ -194,9 +194,11 @@ export const friendRequests = sqliteTable('friend_requests', { toId: text('to_id').notNull().references(() => users.id, { onDelete: 'cascade' }), status: text('status').default('pending'), // 'pending', 'accepted', 'declined' createdAt: integer('created_at').notNull(), + relayMessageId: text('relay_message_id'), // entityId of the originating relay event; null for local-only requests. Used by the rollback hook in federationRollback.ts to find rows for deletion when a federated friend_request_create is permanently rejected. }, (table) => ({ toIdx: index('idx_friend_requests_to_id').on(table.toId), fromIdx: index('idx_friend_requests_from_id').on(table.fromId), + relayMessageIdx: index('idx_friend_requests_relay_message_id').on(table.relayMessageId), })); export const reactions = sqliteTable('reactions', {