Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion app/api/v1/endpoints/article.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

from app.utils.get_db import get_db
from app.utils.auth import get_current_user
from app.curd.article import crud_upload_to_self_folder, crud_get_self_folders, crud_get_articles_in_folder, crud_self_create_folder, crud_self_article_to_recycle_bin, crud_self_folder_to_recycle_bin, crud_annotate_self_article, crud_read_article, crud_read_article_by_url, crud_import_self_folder, crud_export_self_folder,crud_create_tag, crud_delete_tag, crud_get_article_tags, crud_all_tags_order, crud_change_folder_name, crud_change_article_name, crud_article_statistic, crud_self_tree, crud_self_article_statistic, crud_items_in_recycle_bin, crud_delete_forever, crud_recover
from app.curd.article import crud_upload_to_self_folder, crud_get_self_folders, crud_get_articles_in_folder, crud_self_create_folder, crud_self_article_to_recycle_bin, crud_self_folder_to_recycle_bin, crud_annotate_self_article, crud_read_article, crud_read_article_by_url, crud_import_self_folder, crud_export_self_folder,crud_create_tag, crud_delete_tag, crud_get_article_tags, crud_all_tags_order, crud_change_folder_name, crud_change_article_name, crud_article_statistic, crud_self_tree, crud_search, crud_self_article_statistic, crud_items_in_recycle_bin, crud_delete_forever, crud_recover
from app.schemas.article import SelfCreateFolder

router = APIRouter()
Expand Down Expand Up @@ -194,6 +194,12 @@ async def self_tree(page_number: Optional[int] = Query(None, ge=1), page_size: O
total_folder_num, folders = await crud_self_tree(user_id, page_number, page_size, db)
return {"total_folder_num": total_folder_num, "folders": folders}

@router.get("/search", response_model="dict")
async def search(query: str = Query(...), page_number: Optional[int] = Query(None, ge=1), page_size: Optional[int] = Query(None, ge=1), db: AsyncSession = Depends(get_db), user: dict = Depends(get_current_user)):
user_id = user.get("id")
total_folder_num, folders = await crud_search(user_id, query, page_number, page_size, db)
return {"total_folder_num": total_folder_num, "folders": folders}

@router.get("/selfArticleStatistic", response_model=dict)
async def self_article_statistic(db: AsyncSession = Depends(get_db), user: dict = Depends(get_current_user)):
user_id = user.get("id")
Expand Down
36 changes: 36 additions & 0 deletions app/curd/article.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,42 @@ async def crud_self_tree(user_id: int, page_number: int, page_size: int, db: Asy

return total_num, folder_array

async def crud_search(user_id: int, input: str, page_number: int, page_size: int, db: AsyncSession):
# 应在所有文件夹下搜索文献
query = select(Folder).where(Folder.user_id == user_id, Folder.visible == True).order_by(Folder.id.desc())
result = await db.execute(query)
folders = result.scalars().all()
folder_array = [{"folder_id": folder.id, "folder_name": folder.name, "articles": []} for folder in folders]
# 查询文献
for i in range(len(folder_array)):
query = select(Article).where(Article.folder_id == folder_array[i].get("folder_id"), Article.visible == True, Article.name.like(f"%{input}%")).order_by(Article.id.desc())
result = await db.execute(query)
articles = result.scalars().all()
article_array = [{"article_id": article.id, "article_name": article.name, "tags": [], "notes": []} for article in articles]
folder_array[i]["articles"] = article_array
# 查询所有tag和笔记
for j in range(len(article_array)):
# 查找所有tag
query = select(Tag).where(Tag.article_id == article_array[j].get("article_id")).order_by(Tag.id.asc())
result = await db.execute(query)
tags = result.scalars().all()
tag_array = [{"tag_id": tag.id, "tag_content": tag.content} for tag in tags]
article_array[j]["tags"] = tag_array
# 查找所有note
query = select(Note).where(Note.article_id == article_array[j].get("article_id"), Note.visible == True).order_by(Note.id.desc())
result = await db.execute(query)
notes = result.scalars().all()
note_array = [{"note_id": note.id, "note_title": note.title} for note in notes]
article_array[j]["notes"] = note_array
# 屏蔽掉没有搜索到文献的文件夹
folder_array[:] = [folder for folder in folder_array if folder["articles"]]
total_num = len(folder_array)
# 分页
if page_number and page_size:
folder_array = folder_array[(page_number - 1) * page_size : page_number * page_size]
# 返回
return total_num, folder_array

async def crud_self_article_statistic(user_id: int, db: AsyncSession):
# 查询个人拥有的、未被删除的文献总数
query = (
Expand Down