Add personal notes, DeepSearch history, backup offload, and gateway auth throttling

Also streamline the top navigation: drop the Tools dropdown, make Quizzes
and Battles icon-only entries, and remove the Workspace, Containers and
Editor entry points from the project detail page.
This commit is contained in:
2026-09-12 20:32:31 +02:00
parent c4f7d01b2d
commit cae139ead9
158 changed files with 6156 additions and 377 deletions
+15
View File
@@ -179,6 +179,7 @@ def init_db():
("read", False),
("created_at", ""),
("updated_at", ""),
("client_id", ""),
):
if not messages.has_column(column):
messages.create_column_by_example(column, example)
@@ -194,6 +195,7 @@ def init_db():
["receiver_uid", "sender_uid"],
)
_index(db, "messages", "idx_messages_updated_at", ["updated_at"])
_index(db, "messages", "idx_messages_dedupe", ["sender_uid", "client_id"])
_index(db, "notifications", "idx_notifications_user", ["user_uid"])
_index(db, "notifications", "idx_notifications_user_read", ["user_uid", "read"])
push_registration = get_table("push_registration")
@@ -372,6 +374,8 @@ def init_db():
)
_index(db, "bookmarks", "idx_bookmarks_user", ["user_uid"])
_index(db, "bookmarks", "idx_bookmarks_target", ["target_type", "target_uid"])
_index(db, "notes", "idx_notes_user", ["user_uid"])
_index(db, "notes", "idx_notes_target", ["target_type", "target_uid"])
_index(db, "polls", "idx_polls_post", ["post_uid"])
_index(db, "poll_options", "idx_poll_options_poll", ["poll_uid"])
_index(db, "poll_votes", "idx_poll_votes_poll", ["poll_uid"])
@@ -1248,6 +1252,12 @@ def init_db():
_index(db, "deepsearch_sessions", "idx_deepsearch_sessions_owner", ["owner_kind", "owner_id"])
_index(db, "deepsearch_sessions", "idx_deepsearch_sessions_status", ["status"])
_index(db, "deepsearch_sessions", "idx_deepsearch_sessions_created", ["created_at"])
_index(
db,
"deepsearch_sessions",
"idx_deepsearch_sessions_owner_created",
["owner_kind", "owner_id", "created_at"],
)
deepsearch_messages = get_table("deepsearch_messages")
for column, example in (
@@ -2062,6 +2072,7 @@ def init_db():
_index(db, "reactions", "idx_reactions_created_at", ["created_at"])
_index(db, "votes", "idx_votes_created_at", ["created_at"])
_index(db, "bookmarks", "idx_bookmarks_created_at", ["created_at"])
_index(db, "notes", "idx_notes_created_at", ["created_at"])
_index(db, "badges", "idx_badges_created_at", ["created_at"])
_index(db, "audit_log", "idx_audit_result_created", ["result", "created_at"])
_index(db, "jobs", "idx_jobs_created_at", ["created_at"])
@@ -2281,6 +2292,10 @@ def backfill_api_keys() -> int:
users.create_column_by_example("suspension_reason", "")
if not users.has_column("deletion_requested_at"):
users.create_column_by_example("deletion_requested_at", "")
if not users.has_column("active_conversation_uid"):
users.create_column_by_example("active_conversation_uid", "")
if not users.has_column("active_conversation_at"):
users.create_column_by_example("active_conversation_at", "")
with db:
db.query(
"UPDATE users SET ai_modifier_enabled = 1 WHERE ai_modifier_enabled IS NULL"