Skip to content

Commit eec0b1a

Browse files
authored
Merge pull request #54 from BUAA-SE-coders007/feature/tree_and_new_id
[feat]: 个人文件树和创建时返回id
2 parents 07513b6 + ed574f1 commit eec0b1a

File tree

2 files changed

+41
-6
lines changed

2 files changed

+41
-6
lines changed

app/api/v1/endpoints/article.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
from app.utils.get_db import get_db
1313
from app.utils.auth import get_current_user
14-
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
14+
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
1515
from app.schemas.article import SelfCreateFolder
1616

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

35-
return {"msg": "Article created successfully."}
35+
return {"msg": "Article created successfully.", "article_id": article_id}
3636

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

6363
# 数据库插入
64-
await crud_self_create_folder(folder_name, user_id, db)
64+
folder_id = await crud_self_create_folder(folder_name, user_id, db)
6565

6666
# 返回结果
67-
return {"msg": "User Folder Created Successfully"}
67+
return {"msg": "User Folder Created Successfully", "folder_id": folder_id}
6868

6969
@router.delete("/selfArticleToRecycleBin", response_model="dict")
7070
async def self_article_to_recycle_bin(article_id: int = Query(...), db: AsyncSession = Depends(get_db)):
@@ -184,4 +184,10 @@ async def change_folder_name(folder_id: int = Body(...), folder_name: str = Body
184184
@router.post("/changeArticleName", response_model="dict")
185185
async def change_article_name(article_id: int = Body(...), article_name: str = Body(...), db: AsyncSession = Depends(get_db)):
186186
await crud_change_article_name(article_id, article_name, db)
187-
return {"msg": "Article name changed successfully"}
187+
return {"msg": "Article name changed successfully"}
188+
189+
@router.get("/selfTree", response_model="dict")
190+
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)):
191+
user_id = user.get("id")
192+
total_folder_num, folders = await crud_self_tree(user_id, page_number, page_size, db)
193+
return {"total_folder_num": total_folder_num, "folders": folders}

app/curd/article.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ async def crud_self_create_folder(name: str, user_id: int, db: AsyncSession):
4444
db.add(new_folder)
4545
await db.commit()
4646
await db.refresh(new_folder)
47+
return new_folder.id
4748

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

194-
return articles
195+
return articles
196+
197+
async def crud_self_tree(user_id: int, page_number: int, page_size: int, db: AsyncSession):
198+
query = select(Folder).where(Folder.user_id == user_id, Folder.visible == True).order_by(Folder.id.desc())
199+
count_query = select(func.count()).select_from(query.subquery())
200+
count_result = await db.execute(count_query)
201+
total_num = count_result.scalar()
202+
203+
if page_number and page_size:
204+
offset = (page_number - 1) * page_size
205+
query = query.offset(offset).limit(page_size)
206+
result = await db.execute(query)
207+
folders = result.scalars().all()
208+
209+
folder_array = [{"folder_id": folder.id, "folder_name": folder.name, "articles": []} for folder in folders]
210+
for i in range(len(folder_array)):
211+
query = select(Article).where(Article.folder_id == folder_array[i].get("folder_id"), Article.visible == True).order_by(Article.id.desc())
212+
result = await db.execute(query)
213+
articles = result.scalars().all()
214+
article_array = [{"article_id": article.id, "article_name": article.name, "notes": []} for article in articles]
215+
folder_array[i]["articles"] = article_array
216+
for j in range(len(article_array)):
217+
query = select(Note).where(Note.article_id == article_array[j].get("article_id"), Note.visible == True).order_by(Note.id.desc())
218+
result = await db.execute(query)
219+
notes = result.scalars().all()
220+
note_array = [{"note_id": note.id, "note_title": note.title} for note in notes]
221+
article_array[j]["notes"] = note_array
222+
223+
return total_num, folder_array

0 commit comments

Comments
 (0)