wip: folders

This commit is contained in:
Timothy Jaeryang Baek 2025-08-14 17:27:32 +04:00
parent 9a210e743d
commit a02b9b1010
3 changed files with 25 additions and 20 deletions

View file

@ -7,7 +7,10 @@ import re
from pydantic import BaseModel, ConfigDict from pydantic import BaseModel, ConfigDict
from sqlalchemy import BigInteger, Column, Text, JSON, Boolean, func from sqlalchemy import BigInteger, Column, Text, JSON, Boolean, func
from sqlalchemy import select
from backend.open_webui.internal import db
from open_webui.internal.db import Base, get_db from open_webui.internal.db import Base, get_db
from open_webui.env import SRC_LOG_LEVELS from open_webui.env import SRC_LOG_LEVELS
@ -244,9 +247,9 @@ class FolderTable:
) -> Optional[FolderModel]: ) -> Optional[FolderModel]:
try: try:
async with get_db() as db: async with get_db() as db:
folder = ( stmt = select(Folder).where(Folder.id == id, Folder.user_id == user_id)
await db.query(Folder).filter_by(id=id, user_id=user_id).first() result = await db.execute(stmt)
) folder = result.scalars().first()
if not folder: if not folder:
return None return None

View file

@ -203,7 +203,7 @@ async def search_user_chats(
@router.get("/folder/{folder_id}", response_model=list[ChatResponse]) @router.get("/folder/{folder_id}", response_model=list[ChatResponse])
async def get_chats_by_folder_id(folder_id: str, user=Depends(get_verified_user)): async def get_chats_by_folder_id(folder_id: str, user=Depends(get_verified_user)):
folder_ids = [folder_id] folder_ids = [folder_id]
children_folders = Folders.get_children_folders_by_id_and_user_id( children_folders = await Folders.get_children_folders_by_id_and_user_id(
folder_id, user.id folder_id, user.id
) )
if children_folders: if children_folders:

View file

@ -42,7 +42,7 @@ router = APIRouter()
@router.get("/", response_model=list[FolderModel]) @router.get("/", response_model=list[FolderModel])
async def get_folders(user=Depends(get_verified_user)): async def get_folders(user=Depends(get_verified_user)):
folders = Folders.get_folders_by_user_id(user.id) folders = await Folders.get_folders_by_user_id(user.id)
return [ return [
{ {
@ -66,8 +66,8 @@ async def get_folders(user=Depends(get_verified_user)):
@router.post("/") @router.post("/")
def create_folder(form_data: FolderForm, user=Depends(get_verified_user)): async def create_folder(form_data: FolderForm, user=Depends(get_verified_user)):
folder = Folders.get_folder_by_parent_id_and_user_id_and_name( folder = await Folders.get_folder_by_parent_id_and_user_id_and_name(
None, user.id, form_data.name None, user.id, form_data.name
) )
@ -78,7 +78,7 @@ def create_folder(form_data: FolderForm, user=Depends(get_verified_user)):
) )
try: try:
folder = Folders.insert_new_folder(user.id, form_data) folder = await Folders.insert_new_folder(user.id, form_data)
return folder return folder
except Exception as e: except Exception as e:
log.exception(e) log.exception(e)
@ -96,7 +96,7 @@ def create_folder(form_data: FolderForm, user=Depends(get_verified_user)):
@router.get("/{id}", response_model=Optional[FolderModel]) @router.get("/{id}", response_model=Optional[FolderModel])
async def get_folder_by_id(id: str, user=Depends(get_verified_user)): async def get_folder_by_id(id: str, user=Depends(get_verified_user)):
folder = Folders.get_folder_by_id_and_user_id(id, user.id) folder = await Folders.get_folder_by_id_and_user_id(id, user.id)
if folder: if folder:
return folder return folder
else: else:
@ -115,9 +115,9 @@ async def get_folder_by_id(id: str, user=Depends(get_verified_user)):
async def update_folder_name_by_id( async def update_folder_name_by_id(
id: str, form_data: FolderForm, user=Depends(get_verified_user) id: str, form_data: FolderForm, user=Depends(get_verified_user)
): ):
folder = Folders.get_folder_by_id_and_user_id(id, user.id) folder = await Folders.get_folder_by_id_and_user_id(id, user.id)
if folder: if folder:
existing_folder = Folders.get_folder_by_parent_id_and_user_id_and_name( existing_folder = await Folders.get_folder_by_parent_id_and_user_id_and_name(
folder.parent_id, user.id, form_data.name folder.parent_id, user.id, form_data.name
) )
if existing_folder and existing_folder.id != id: if existing_folder and existing_folder.id != id:
@ -127,7 +127,9 @@ async def update_folder_name_by_id(
) )
try: try:
folder = Folders.update_folder_by_id_and_user_id(id, user.id, form_data) folder = await Folders.update_folder_by_id_and_user_id(
id, user.id, form_data
)
return folder return folder
except Exception as e: except Exception as e:
@ -157,9 +159,9 @@ class FolderParentIdForm(BaseModel):
async def update_folder_parent_id_by_id( async def update_folder_parent_id_by_id(
id: str, form_data: FolderParentIdForm, user=Depends(get_verified_user) id: str, form_data: FolderParentIdForm, user=Depends(get_verified_user)
): ):
folder = Folders.get_folder_by_id_and_user_id(id, user.id) folder = await Folders.get_folder_by_id_and_user_id(id, user.id)
if folder: if folder:
existing_folder = Folders.get_folder_by_parent_id_and_user_id_and_name( existing_folder = await Folders.get_folder_by_parent_id_and_user_id_and_name(
form_data.parent_id, user.id, folder.name form_data.parent_id, user.id, folder.name
) )
@ -170,7 +172,7 @@ async def update_folder_parent_id_by_id(
) )
try: try:
folder = Folders.update_folder_parent_id_by_id_and_user_id( folder = await Folders.update_folder_parent_id_by_id_and_user_id(
id, user.id, form_data.parent_id id, user.id, form_data.parent_id
) )
return folder return folder
@ -201,10 +203,10 @@ class FolderIsExpandedForm(BaseModel):
async def update_folder_is_expanded_by_id( async def update_folder_is_expanded_by_id(
id: str, form_data: FolderIsExpandedForm, user=Depends(get_verified_user) id: str, form_data: FolderIsExpandedForm, user=Depends(get_verified_user)
): ):
folder = Folders.get_folder_by_id_and_user_id(id, user.id) folder = await Folders.get_folder_by_id_and_user_id(id, user.id)
if folder: if folder:
try: try:
folder = Folders.update_folder_is_expanded_by_id_and_user_id( folder = await Folders.update_folder_is_expanded_by_id_and_user_id(
id, user.id, form_data.is_expanded id, user.id, form_data.is_expanded
) )
return folder return folder
@ -231,7 +233,7 @@ async def update_folder_is_expanded_by_id(
async def delete_folder_by_id( async def delete_folder_by_id(
request: Request, id: str, user=Depends(get_verified_user) request: Request, id: str, user=Depends(get_verified_user)
): ):
chat_delete_permission = has_permission( chat_delete_permission = await has_permission(
user.id, "chat.delete", request.app.state.config.USER_PERMISSIONS user.id, "chat.delete", request.app.state.config.USER_PERMISSIONS
) )
@ -241,10 +243,10 @@ async def delete_folder_by_id(
detail=ERROR_MESSAGES.ACCESS_PROHIBITED, detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
) )
folder = Folders.get_folder_by_id_and_user_id(id, user.id) folder = await Folders.get_folder_by_id_and_user_id(id, user.id)
if folder: if folder:
try: try:
folder_ids = Folders.delete_folder_by_id_and_user_id(id, user.id) folder_ids = await Folders.delete_folder_by_id_and_user_id(id, user.id)
for folder_id in folder_ids: for folder_id in folder_ids:
await Chats.delete_chats_by_user_id_and_folder_id(user.id, folder_id) await Chats.delete_chats_by_user_id_and_folder_id(user.id, folder_id)