mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-11 20:05:19 +00:00
wip: folders
This commit is contained in:
parent
9a210e743d
commit
a02b9b1010
3 changed files with 25 additions and 20 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue