forked from open-webui/open-webui
		
	feat: add backend functions for sharing chats
This commit is contained in:
		
							parent
							
								
									a363c1f2f1
								
							
						
					
					
						commit
						94976e5ed3
					
				
					 2 changed files with 112 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -189,6 +189,77 @@ async def delete_chat_by_id(request: Request, id: str, user=Depends(get_current_
 | 
			
		|||
    return result
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############################
 | 
			
		||||
# ShareChatById
 | 
			
		||||
############################
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@router.post("/{id}/share", response_model=Optional[ChatResponse])
 | 
			
		||||
async def share_chat_by_id(id: str, user=Depends(get_current_user)):
 | 
			
		||||
    chat = Chats.get_chat_by_id_and_user_id(id, user.id)
 | 
			
		||||
    if chat:
 | 
			
		||||
        if chat.share_id:
 | 
			
		||||
            shared_chat = Chats.get_chat_by_id_and_user_id(chat.share_id, "shared")
 | 
			
		||||
            return ChatResponse(
 | 
			
		||||
                **{**shared_chat.model_dump(), "chat": json.loads(shared_chat.chat)}
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        shared_chat = Chats.insert_shared_chat(chat.id)
 | 
			
		||||
        if not shared_chat:
 | 
			
		||||
            raise HTTPException(
 | 
			
		||||
                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
 | 
			
		||||
                detail=ERROR_MESSAGES.DEFAULT(),
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        return ChatResponse(
 | 
			
		||||
            **{**shared_chat.model_dump(), "chat": json.loads(shared_chat.chat)}
 | 
			
		||||
        )
 | 
			
		||||
    else:
 | 
			
		||||
        raise HTTPException(
 | 
			
		||||
            status_code=status.HTTP_401_UNAUTHORIZED,
 | 
			
		||||
            detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############################
 | 
			
		||||
# DeletedSharedChatById
 | 
			
		||||
############################
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@router.delete("/{id}/share", response_model=Optional[bool])
 | 
			
		||||
async def delete_shared_chat_by_id(id: str, user=Depends(get_current_user)):
 | 
			
		||||
    chat = Chats.get_chat_by_id_and_user_id(id, user.id)
 | 
			
		||||
    if chat:
 | 
			
		||||
        if not chat.share_id:
 | 
			
		||||
            return False
 | 
			
		||||
        result = Chats.delete_chat_by_id_and_user_id(chat.share_id, "shared")
 | 
			
		||||
        update_result = Chats.update_chat_share_id_by_id(chat.id, None)
 | 
			
		||||
 | 
			
		||||
        return result and update_result
 | 
			
		||||
    else:
 | 
			
		||||
        raise HTTPException(
 | 
			
		||||
            status_code=status.HTTP_401_UNAUTHORIZED,
 | 
			
		||||
            detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############################
 | 
			
		||||
# GetSharedChatById
 | 
			
		||||
############################
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@router.get("/share/{id}", response_model=Optional[ChatResponse])
 | 
			
		||||
async def get_shared_chat_by_id(id: str, user=Depends(get_current_user)):
 | 
			
		||||
    chat = Chats.get_chat_by_id_and_user_id(id, "shared")
 | 
			
		||||
 | 
			
		||||
    if chat:
 | 
			
		||||
        return ChatResponse(**{**chat.model_dump(), "chat": json.loads(chat.chat)})
 | 
			
		||||
    else:
 | 
			
		||||
        raise HTTPException(
 | 
			
		||||
            status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############################
 | 
			
		||||
# GetChatTagsById
 | 
			
		||||
############################
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue