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
16 changes: 11 additions & 5 deletions app/api/v1/endpoints/article.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,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_read_article, 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
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_read_article, 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
from app.schemas.article import SelfCreateFolder

router = APIRouter()
Expand All @@ -32,7 +32,7 @@ async def upload_to_self_folder(folder_id: int = Query(...), article: UploadFile
content = await article.read()
f.write(content)

return {"msg": "Article created successfully."}
return {"msg": "Article created successfully.", "article_id": article_id}

@router.get("/getSelfFolders", response_model="dict")
async def get_self_folders(page_number: Optional[int] = Query(None, ge=1), page_size: Optional[int] = Query(None, ge=1),
Expand Down Expand Up @@ -61,10 +61,10 @@ async def self_create_folder(model: SelfCreateFolder, db: AsyncSession = Depends
user_id = user.get("id")

# 数据库插入
await crud_self_create_folder(folder_name, user_id, db)
folder_id = await crud_self_create_folder(folder_name, user_id, db)

# 返回结果
return {"msg": "User Folder Created Successfully"}
return {"msg": "User Folder Created Successfully", "folder_id": folder_id}

@router.delete("/selfArticleToRecycleBin", response_model="dict")
async def self_article_to_recycle_bin(article_id: int = Query(...), db: AsyncSession = Depends(get_db)):
Expand Down Expand Up @@ -184,4 +184,10 @@ async def change_folder_name(folder_id: int = Body(...), folder_name: str = Body
@router.post("/changeArticleName", response_model="dict")
async def change_article_name(article_id: int = Body(...), article_name: str = Body(...), db: AsyncSession = Depends(get_db)):
await crud_change_article_name(article_id, article_name, db)
return {"msg": "Article name changed successfully"}
return {"msg": "Article name changed successfully"}

@router.get("/selfTree", response_model="dict")
async def self_tree(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_self_tree(user_id, page_number, page_size, db)
return {"total_folder_num": total_folder_num, "folders": folders}
31 changes: 30 additions & 1 deletion app/curd/article.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ async def crud_self_create_folder(name: str, user_id: int, db: AsyncSession):
db.add(new_folder)
await db.commit()
await db.refresh(new_folder)
return new_folder.id

async def crud_self_article_to_recycle_bin(article_id: int, db: AsyncSession):
# 查询 article
Expand Down Expand Up @@ -191,4 +192,32 @@ async def crud_article_statistic(db: AsyncSession):
if i == len(articles) or articles[i].get("date") != seven_days_ago + timedelta(days=i):
articles.insert(i, {"date": seven_days_ago + timedelta(days=i), "count": 0})

return articles
return articles

async def crud_self_tree(user_id: int, 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())
count_query = select(func.count()).select_from(query.subquery())
count_result = await db.execute(count_query)
total_num = count_result.scalar()

if page_number and page_size:
offset = (page_number - 1) * page_size
query = query.offset(offset).limit(page_size)
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).order_by(Article.id.desc())
result = await db.execute(query)
articles = result.scalars().all()
article_array = [{"article_id": article.id, "article_name": article.name, "notes": []} for article in articles]
folder_array[i]["articles"] = article_array
for j in range(len(article_array)):
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

return total_num, folder_array