diff --git a/crates/kitsune-db/src/schema.rs b/crates/kitsune-db/src/schema.rs
index 19d4e42d7..df16710b0 100644
--- a/crates/kitsune-db/src/schema.rs
+++ b/crates/kitsune-db/src/schema.rs
@@ -26,6 +26,18 @@ diesel::table! {
         ///
         /// (Automatically generated by Diesel.)
         id -> Uuid,
+        /// The `avatar_id` column of the `accounts` table.
+        ///
+        /// Its SQL type is `Nullable<Uuid>`.
+        ///
+        /// (Automatically generated by Diesel.)
+        avatar_id -> Nullable<Uuid>,
+        /// The `header_id` column of the `accounts` table.
+        ///
+        /// Its SQL type is `Nullable<Uuid>`.
+        ///
+        /// (Automatically generated by Diesel.)
+        header_id -> Nullable<Uuid>,
         /// The `display_name` column of the `accounts` table.
         ///
         /// Its SQL type is `Nullable<Text>`.
@@ -62,96 +74,118 @@ diesel::table! {
         ///
         /// (Automatically generated by Diesel.)
         domain -> Text,
-        /// The `actor_type` column of the `accounts` table.
+        /// The `account_type` column of the `accounts` table.
         ///
         /// Its SQL type is `Int4`.
         ///
         /// (Automatically generated by Diesel.)
-        actor_type -> Int4,
+        account_type -> Int4,
         /// The `url` column of the `accounts` table.
         ///
         /// Its SQL type is `Text`.
         ///
         /// (Automatically generated by Diesel.)
         url -> Text,
-        /// The `featured_collection_url` column of the `accounts` table.
+        /// The `created_at` column of the `accounts` table.
         ///
-        /// Its SQL type is `Nullable<Text>`.
+        /// Its SQL type is `Timestamptz`.
         ///
         /// (Automatically generated by Diesel.)
-        featured_collection_url -> Nullable<Text>,
-        /// The `followers_url` column of the `accounts` table.
+        created_at -> Timestamptz,
+        /// The `updated_at` column of the `accounts` table.
         ///
-        /// Its SQL type is `Nullable<Text>`.
+        /// Its SQL type is `Timestamptz`.
         ///
         /// (Automatically generated by Diesel.)
-        followers_url -> Nullable<Text>,
-        /// The `following_url` column of the `accounts` table.
+        updated_at -> Timestamptz,
+        /// The `account_ts` column of the `accounts` table.
         ///
-        /// Its SQL type is `Nullable<Text>`.
+        /// Its SQL type is `Tsvector`.
         ///
         /// (Automatically generated by Diesel.)
-        following_url -> Nullable<Text>,
-        /// The `inbox_url` column of the `accounts` table.
+        account_ts -> Tsvector,
+    }
+}
+
+diesel::table! {
+    use diesel::sql_types::*;
+    use diesel_full_text_search::Tsvector;
+
+    /// Representation of the `accounts_activitypub` table.
+    ///
+    /// (Automatically generated by Diesel.)
+    accounts_activitypub (account_id) {
+        /// The `account_id` column of the `accounts_activitypub` table.
         ///
-        /// Its SQL type is `Nullable<Text>`.
+        /// Its SQL type is `Uuid`.
         ///
         /// (Automatically generated by Diesel.)
-        inbox_url -> Nullable<Text>,
-        /// The `outbox_url` column of the `accounts` table.
+        account_id -> Uuid,
+        /// The `featured_collection_url` column of the `accounts_activitypub` table.
         ///
         /// Its SQL type is `Nullable<Text>`.
         ///
         /// (Automatically generated by Diesel.)
-        outbox_url -> Nullable<Text>,
-        /// The `shared_inbox_url` column of the `accounts` table.
+        featured_collection_url -> Nullable<Text>,
+        /// The `followers_url` column of the `accounts_activitypub` table.
         ///
         /// Its SQL type is `Nullable<Text>`.
         ///
         /// (Automatically generated by Diesel.)
-        shared_inbox_url -> Nullable<Text>,
-        /// The `public_key_id` column of the `accounts` table.
+        followers_url -> Nullable<Text>,
+        /// The `following_url` column of the `accounts_activitypub` table.
         ///
-        /// Its SQL type is `Text`.
+        /// Its SQL type is `Nullable<Text>`.
         ///
         /// (Automatically generated by Diesel.)
-        public_key_id -> Text,
-        /// The `public_key` column of the `accounts` table.
+        following_url -> Nullable<Text>,
+        /// The `inbox_url` column of the `accounts_activitypub` table.
         ///
-        /// Its SQL type is `Text`.
+        /// Its SQL type is `Nullable<Text>`.
         ///
         /// (Automatically generated by Diesel.)
-        public_key -> Text,
-        /// The `created_at` column of the `accounts` table.
+        inbox_url -> Nullable<Text>,
+        /// The `outbox_url` column of the `accounts_activitypub` table.
         ///
-        /// Its SQL type is `Timestamptz`.
+        /// Its SQL type is `Nullable<Text>`.
         ///
         /// (Automatically generated by Diesel.)
-        created_at -> Timestamptz,
-        /// The `updated_at` column of the `accounts` table.
+        outbox_url -> Nullable<Text>,
+        /// The `shared_inbox_url` column of the `accounts_activitypub` table.
         ///
-        /// Its SQL type is `Timestamptz`.
+        /// Its SQL type is `Nullable<Text>`.
         ///
         /// (Automatically generated by Diesel.)
-        updated_at -> Timestamptz,
-        /// The `account_ts` column of the `accounts` table.
+        shared_inbox_url -> Nullable<Text>,
+        /// The `key_id` column of the `accounts_activitypub` table.
         ///
-        /// Its SQL type is `Tsvector`.
+        /// Its SQL type is `Text`.
         ///
         /// (Automatically generated by Diesel.)
-        account_ts -> Tsvector,
-        /// The `avatar_id` column of the `accounts` table.
+        key_id -> Text,
+    }
+}
+
+diesel::table! {
+    use diesel::sql_types::*;
+    use diesel_full_text_search::Tsvector;
+
+    /// Representation of the `accounts_cryptographic_keys` table.
+    ///
+    /// (Automatically generated by Diesel.)
+    accounts_cryptographic_keys (account_id, key_id) {
+        /// The `account_id` column of the `accounts_cryptographic_keys` table.
         ///
-        /// Its SQL type is `Nullable<Uuid>`.
+        /// Its SQL type is `Uuid`.
         ///
         /// (Automatically generated by Diesel.)
-        avatar_id -> Nullable<Uuid>,
-        /// The `header_id` column of the `accounts` table.
+        account_id -> Uuid,
+        /// The `key_id` column of the `accounts_cryptographic_keys` table.
         ///
-        /// Its SQL type is `Nullable<Uuid>`.
+        /// Its SQL type is `Text`.
         ///
         /// (Automatically generated by Diesel.)
-        header_id -> Nullable<Uuid>,
+        key_id -> Text,
     }
 }
 
@@ -267,6 +301,41 @@ diesel::table! {
     }
 }
 
+diesel::table! {
+    use diesel::sql_types::*;
+    use diesel_full_text_search::Tsvector;
+
+    /// Representation of the `cryptographic_keys` table.
+    ///
+    /// (Automatically generated by Diesel.)
+    cryptographic_keys (key_id) {
+        /// The `key_id` column of the `cryptographic_keys` table.
+        ///
+        /// Its SQL type is `Text`.
+        ///
+        /// (Automatically generated by Diesel.)
+        key_id -> Text,
+        /// The `public_key_pem` column of the `cryptographic_keys` table.
+        ///
+        /// Its SQL type is `Text`.
+        ///
+        /// (Automatically generated by Diesel.)
+        public_key_pem -> Text,
+        /// The `private_key_pem` column of the `cryptographic_keys` table.
+        ///
+        /// Its SQL type is `Nullable<Text>`.
+        ///
+        /// (Automatically generated by Diesel.)
+        private_key_pem -> Nullable<Text>,
+        /// The `created_at` column of the `cryptographic_keys` table.
+        ///
+        /// Its SQL type is `Timestamptz`.
+        ///
+        /// (Automatically generated by Diesel.)
+        created_at -> Timestamptz,
+    }
+}
+
 diesel::table! {
     use diesel::sql_types::*;
     use diesel_full_text_search::Tsvector;
@@ -765,6 +834,12 @@ diesel::table! {
         ///
         /// (Automatically generated by Diesel.)
         content_lang -> LanguageIsoCode,
+        /// The `link_preview_url` column of the `posts` table.
+        ///
+        /// Its SQL type is `Nullable<Text>`.
+        ///
+        /// (Automatically generated by Diesel.)
+        link_preview_url -> Nullable<Text>,
         /// The `visibility` column of the `posts` table.
         ///
         /// Its SQL type is `Int4`.
@@ -801,12 +876,6 @@ diesel::table! {
         ///
         /// (Automatically generated by Diesel.)
         post_ts -> Tsvector,
-        /// The `link_preview_url` column of the `posts` table.
-        ///
-        /// Its SQL type is `Nullable<Text>`.
-        ///
-        /// (Automatically generated by Diesel.)
-        link_preview_url -> Nullable<Text>,
     }
 }
 
@@ -946,12 +1015,6 @@ diesel::table! {
         ///
         /// (Automatically generated by Diesel.)
         id -> Uuid,
-        /// The `account_id` column of the `users` table.
-        ///
-        /// Its SQL type is `Uuid`.
-        ///
-        /// (Automatically generated by Diesel.)
-        account_id -> Uuid,
         /// The `oidc_id` column of the `users` table.
         ///
         /// Its SQL type is `Nullable<Text>`.
@@ -982,12 +1045,6 @@ diesel::table! {
         ///
         /// (Automatically generated by Diesel.)
         domain -> Text,
-        /// The `private_key` column of the `users` table.
-        ///
-        /// Its SQL type is `Text`.
-        ///
-        /// (Automatically generated by Diesel.)
-        private_key -> Text,
         /// The `confirmed_at` column of the `users` table.
         ///
         /// Its SQL type is `Nullable<Timestamptz>`.
@@ -1015,6 +1072,29 @@ diesel::table! {
     }
 }
 
+diesel::table! {
+    use diesel::sql_types::*;
+    use diesel_full_text_search::Tsvector;
+
+    /// Representation of the `users_accounts` table.
+    ///
+    /// (Automatically generated by Diesel.)
+    users_accounts (user_id, account_id) {
+        /// The `user_id` column of the `users_accounts` table.
+        ///
+        /// Its SQL type is `Uuid`.
+        ///
+        /// (Automatically generated by Diesel.)
+        user_id -> Uuid,
+        /// The `account_id` column of the `users_accounts` table.
+        ///
+        /// Its SQL type is `Uuid`.
+        ///
+        /// (Automatically generated by Diesel.)
+        account_id -> Uuid,
+    }
+}
+
 diesel::table! {
     use diesel::sql_types::*;
     use diesel_full_text_search::Tsvector;
@@ -1050,6 +1130,10 @@ diesel::table! {
     }
 }
 
+diesel::joinable!(accounts_activitypub -> accounts (account_id));
+diesel::joinable!(accounts_activitypub -> cryptographic_keys (key_id));
+diesel::joinable!(accounts_cryptographic_keys -> accounts (account_id));
+diesel::joinable!(accounts_cryptographic_keys -> cryptographic_keys (key_id));
 diesel::joinable!(accounts_preferences -> accounts (account_id));
 diesel::joinable!(custom_emojis -> media_attachments (media_attachment_id));
 diesel::joinable!(notifications -> posts (post_id));
@@ -1069,13 +1153,17 @@ diesel::joinable!(posts_media_attachments -> media_attachments (media_attachment
 diesel::joinable!(posts_media_attachments -> posts (post_id));
 diesel::joinable!(posts_mentions -> accounts (account_id));
 diesel::joinable!(posts_mentions -> posts (post_id));
-diesel::joinable!(users -> accounts (account_id));
+diesel::joinable!(users_accounts -> accounts (account_id));
+diesel::joinable!(users_accounts -> users (user_id));
 diesel::joinable!(users_roles -> users (user_id));
 
 diesel::allow_tables_to_appear_in_same_query!(
     accounts,
+    accounts_activitypub,
+    accounts_cryptographic_keys,
     accounts_follows,
     accounts_preferences,
+    cryptographic_keys,
     custom_emojis,
     job_context,
     link_previews,
@@ -1091,5 +1179,6 @@ diesel::allow_tables_to_appear_in_same_query!(
     posts_media_attachments,
     posts_mentions,
     users,
+    users_accounts,
     users_roles,
 );