Skip to content

Commit f12a0dd

Browse files
committed
[feat]: 指定文献所有Tag及顺序,改名
1 parent 3d9fe44 commit f12a0dd

File tree

3 files changed

+59
-8
lines changed

3 files changed

+59
-8
lines changed

app/api/v1/endpoints/article.py

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from fastapi.responses import FileResponse
33
from fastapi import BackgroundTasks
44
from sqlalchemy.ext.asyncio import AsyncSession
5-
from typing import Optional
5+
from typing import Optional, List
66
import os
77
import io
88
from zipfile import ZipFile
@@ -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
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
1515
from app.schemas.article import SelfCreateFolder
1616

1717
router = APIRouter()
@@ -130,7 +130,7 @@ async def import_self_folder(folder_name: str = Query(...), zip: UploadFile = Fi
130130
with open(target_path, "wb") as out_file:
131131
out_file.write(source_file.read())
132132

133-
return {"msg": "Succesfully import articles"}
133+
return {"msg": "Successfully import articles"}
134134

135135
@router.get("/exportSelfFolder", response_class=FileResponse)
136136
async def export_self_folder(background_tasks: BackgroundTasks, folder_id: int = Query(...), db: AsyncSession = Depends(get_db)):
@@ -158,7 +158,7 @@ async def create_tag(article_id: int = Body(...), content: str = Body(...), db:
158158
if len(content) > 30:
159159
raise HTTPException(status_code=405, detail="Invalid tag content, longer than 30")
160160
await crud_create_tag(article_id, content, db)
161-
return {"msg": "Tag Created Succesfully"}
161+
return {"msg": "Tag Created Successfully"}
162162

163163
@router.delete("/deleteTag", response_model="dict")
164164
async def delete_tag(tag_id: int = Query(...), db: AsyncSession = Depends(get_db)):
@@ -169,4 +169,24 @@ async def delete_tag(tag_id: int = Query(...), db: AsyncSession = Depends(get_db
169169
async def get_article_tags(article_id: int = Query(...), db: AsyncSession = Depends(get_db)):
170170
tags = await crud_get_article_tags(article_id, db)
171171
result = [{"tag_id": tag.id, "tag_content": tag.content} for tag in tags]
172-
return {"result": result}
172+
return {"result": result}
173+
174+
@router.post("/allTagsOrder", response_model="dict")
175+
async def all_tags_order(article_id: int = Body(...), tag_contents: List[str] = Body(...), db: AsyncSession = Depends(get_db)):
176+
for tag_content in tag_contents:
177+
if len(tag_content) > 30:
178+
raise HTTPException(status_code=405, detail="Invalid tag content existed, longer than 30")
179+
await crud_all_tags_order(article_id, tag_contents, db)
180+
return {"msg": "Tags and order changed successfully"}
181+
182+
@router.post("/changeFolderName", response_model="dict")
183+
async def change_folder_name(folder_id: int = Body(...), folder_name: str = Body(...), db: AsyncSession = Depends(get_db)):
184+
if folder_name == "" or len(folder_name) > 30:
185+
raise HTTPException(status_code=405, detail="Invalid folder name, empty or longer than 30")
186+
await crud_change_folder_name(folder_id, folder_name, db)
187+
return {"msg": "Folder name changed successfully"}
188+
189+
@router.post("/changeArticleName", response_model="dict")
190+
async def change_article_name(article_id: int = Body(...), article_name: str = Body(...), db: AsyncSession = Depends(get_db)):
191+
await crud_change_article_name(article_id, article_name, db)
192+
return {"msg": "Article name changed successfully"}

app/curd/article.py

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from sqlalchemy.ext.asyncio import AsyncSession
2-
from sqlalchemy.future import select
2+
from sqlalchemy import select, delete
33
from app.models.model import User, Group, Folder, Article, Note, Tag, user_group
44

55
async def crud_upload_to_self_folder(name: str, folder_id: int, db: AsyncSession):
@@ -114,7 +114,38 @@ async def crud_delete_tag(tag_id: int, db: AsyncSession):
114114
await db.commit()
115115

116116
async def crud_get_article_tags(article_id: int, db: AsyncSession):
117-
query = select(Tag).filter(Tag.article_id == article_id)
117+
query = select(Tag).where(Tag.article_id == article_id).order_by(Tag.id.asc())
118118
result = await db.execute(query)
119119
tags = result.scalars().all()
120-
return tags
120+
return tags
121+
122+
async def crud_all_tags_order(article_id: int, tag_contents, db: AsyncSession):
123+
query = delete(Tag).where(Tag.article_id == article_id)
124+
await db.execute(query)
125+
await db.commit()
126+
127+
new_tags = []
128+
for i in range(0, len(tag_contents)):
129+
new_tags.append(Tag(content=tag_contents[i], article_id=article_id))
130+
db.add_all(new_tags)
131+
await db.commit()
132+
for i in range(0, len(new_tags)):
133+
await db.refresh(new_tags[i])
134+
135+
async def crud_change_folder_name(folder_id: int, folder_name: str, db: AsyncSession):
136+
query = select(Folder).where(Folder.id == folder_id)
137+
result = await db.execute(query)
138+
folder = result.scalar_one_or_none()
139+
140+
folder.name = folder_name
141+
await db.commit()
142+
await db.refresh(folder)
143+
144+
async def crud_change_article_name(article_id: int, article_name: str, db: AsyncSession):
145+
query = select(Article).where(Article.id == article_id)
146+
result = await db.execute(query)
147+
article = result.scalar_one_or_none()
148+
149+
article.name = article_name
150+
await db.commit()
151+
await db.refresh(article)

articles/25.pdf

-67 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)