From 5b14d15b003a8703e5c920e249ece6534a379b7f Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 13 Jul 2025 00:51:58 +0400 Subject: [PATCH] feat: migrate folder table Co-Authored-By: Classic298 <27028174+Classic298@users.noreply.github.com> --- .../d31026856c01_update_folder_table_data.py | 23 +++++++++++++++++++ backend/open_webui/models/folders.py | 23 +++++++++++++++---- backend/open_webui/routers/folders.py | 4 +--- 3 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 backend/open_webui/migrations/versions/d31026856c01_update_folder_table_data.py diff --git a/backend/open_webui/migrations/versions/d31026856c01_update_folder_table_data.py b/backend/open_webui/migrations/versions/d31026856c01_update_folder_table_data.py new file mode 100644 index 0000000000..3c916964e9 --- /dev/null +++ b/backend/open_webui/migrations/versions/d31026856c01_update_folder_table_data.py @@ -0,0 +1,23 @@ +"""Update folder table data + +Revision ID: d31026856c01 +Revises: 9f0c9cd09105 +Create Date: 2025-07-13 03:00:00.000000 + +""" + +from alembic import op +import sqlalchemy as sa + +revision = "d31026856c01" +down_revision = "9f0c9cd09105" +branch_labels = None +depends_on = None + + +def upgrade(): + op.add_column("folder", sa.Column("data", sa.JSON(), nullable=True)) + + +def downgrade(): + op.drop_column("folder", "data") diff --git a/backend/open_webui/models/folders.py b/backend/open_webui/models/folders.py index 1c97de26c9..1df37cc4b0 100644 --- a/backend/open_webui/models/folders.py +++ b/backend/open_webui/models/folders.py @@ -29,6 +29,7 @@ class Folder(Base): name = Column(Text) items = Column(JSON, nullable=True) meta = Column(JSON, nullable=True) + data = Column(JSON, nullable=True) is_expanded = Column(Boolean, default=False) created_at = Column(BigInteger) updated_at = Column(BigInteger) @@ -41,6 +42,7 @@ class FolderModel(BaseModel): name: str items: Optional[dict] = None meta: Optional[dict] = None + data: Optional[dict] = None is_expanded: bool = False created_at: int updated_at: int @@ -55,6 +57,7 @@ class FolderModel(BaseModel): class FolderForm(BaseModel): name: str + data: Optional[dict] = None model_config = ConfigDict(extra="allow") @@ -187,8 +190,8 @@ class FolderTable: log.error(f"update_folder: {e}") return - def update_folder_name_by_id_and_user_id( - self, id: str, user_id: str, name: str + def update_folder_by_id_and_user_id( + self, id: str, user_id: str, form_data: FolderForm ) -> Optional[FolderModel]: try: with get_db() as db: @@ -197,16 +200,28 @@ class FolderTable: if not folder: return None + form_data = form_data.model_dump(exclude_unset=True) + existing_folder = ( db.query(Folder) - .filter_by(name=name, parent_id=folder.parent_id, user_id=user_id) + .filter_by( + name=form_data.get("name"), + parent_id=folder.parent_id, + user_id=user_id, + ) .first() ) if existing_folder: return None - folder.name = name + folder.name = form_data.get("name", folder.name) + if "data" in form_data: + folder.data = { + **folder.data, + **form_data["data"], + } + folder.updated_at = int(time.time()) db.commit() diff --git a/backend/open_webui/routers/folders.py b/backend/open_webui/routers/folders.py index 2c41c92854..3ed2eb34a9 100644 --- a/backend/open_webui/routers/folders.py +++ b/backend/open_webui/routers/folders.py @@ -127,9 +127,7 @@ async def update_folder_name_by_id( ) try: - folder = Folders.update_folder_name_by_id_and_user_id( - id, user.id, form_data.name - ) + folder = Folders.update_folder_by_id_and_user_id(id, user.id, form_data) return folder except Exception as e: