11from fastapi import APIRouter , Query , Body , UploadFile , File , Depends , HTTPException
22from sqlalchemy .ext .asyncio import AsyncSession
33import os
4+ import glob
45
56from app .utils .get_db import get_db
67from app .utils .auth import get_current_user
7- from app .curd .group import crud_create , crud_apply_to_enter , crud_get_applications , crud_reply_to_enter
8- from app .schemas .group import ApplyToEnter
8+ from app .curd .group import crud_create , crud_apply_to_enter , crud_get_applications , crud_reply_to_enter , crud_modify_basic_info , crud_modify_admin_list , crud_remove_member , crud_leave_group
9+ from app .schemas .group import ApplyToEnter , LeaveGroup
910
1011router = APIRouter ()
1112
@@ -17,6 +18,7 @@ async def create(group_name: str = Query(...), group_desc: str = Query(...), gro
1718 if len (group_desc ) > 200 :
1819 raise HTTPException (status_code = 405 , detail = "Invalid group description, longer than 200" )
1920 group_id = await crud_create (user .get ("id" ), group_name , group_desc , db )
21+ # 存储头像,文件名为 {group_id}.上传文件的扩展名
2022 if group_avatar :
2123 os .makedirs ("/lhcos-data/group-avatar" , exist_ok = True )
2224 ext = os .path .splitext (group_avatar .filename )[1 ]
@@ -39,8 +41,46 @@ async def get_applications(group_id: int = Query(...), db: AsyncSession = Depend
3941 return {"users" : users }
4042
4143@router .post ("/replyToEnter" , response_model = dict )
42- async def reply_to_enter (user_id : int = Body (...), group_id : int = Body (...), reply : int = Body (...), db : AsyncSession = Depends (get_db )):
43- if reply != 0 and reply != 1 :
44- raise HTTPException (status_code = 405 , detail = "Wrong parameter, reply should be either 0 or 1" )
44+ async def reply_to_enter (user_id : int = Body (...), group_id : int = Body (...), reply : bool = Body (...), db : AsyncSession = Depends (get_db )):
4545 msg = await crud_reply_to_enter (user_id , group_id , reply , db )
46- return {"msg" : msg }
46+ return {"msg" : msg }
47+
48+ @router .post ("/modifyBasicInfo" , response_model = dict )
49+ async def modify_basic_info (group_id : int = Query (...), group_name : str | None = Query (None ), group_desc : str | None = Query (None ), group_avatar : UploadFile | None = File (None ), db : AsyncSession = Depends (get_db )):
50+ if group_name and len (group_name ) > 30 :
51+ raise HTTPException (status_code = 405 , detail = "Invalid group name, longer than 30" )
52+ if group_desc and len (group_desc ) > 200 :
53+ raise HTTPException (status_code = 405 , detail = "Invalid group description, longer than 200" )
54+ await crud_modify_basic_info (db = db , id = group_id , name = group_name , desc = group_desc )
55+ if group_avatar :
56+ os .makedirs ("/lhcos-data/group-avatar" , exist_ok = True )
57+ # 若之前存储了旧头像,则将其删除;若之前就没头像,则不做处理
58+ old_avatar = glob .glob (os .path .join ("/lhcos-data/group-avatar" , group_id + ".*" )) # 基本名为group_id的文件列表,最多有一个元素
59+ if old_avatar :
60+ os .remove (old_avatar [0 ])
61+ # 存储新头像,文件名为 {group_id}.上传文件的扩展名
62+ ext = os .path .splitext (group_avatar .filename )[1 ]
63+ path = os .path .join ("/lhcos-data/group-avatar" , f"{ group_id } { ext } " )
64+ with open (path , "wb" ) as f :
65+ content = await group_avatar .read ()
66+ f .write (content )
67+ return {"msg" : "Basic info modified successfully" }
68+
69+ @router .post ("/modifyAdminList" , response_model = dict )
70+ async def modify_admin_list (group_id : int = Body (...), user_id : int = Body (...), add_admin : bool = Body (...), db : AsyncSession = Depends (get_db )):
71+ msg = await crud_modify_admin_list (group_id , user_id , add_admin , db )
72+ return {"msg" : msg }
73+
74+ @router .post ("/removeMember" , response_model = dict )
75+ async def remove_member (group_id : int = Body (...), user_id : int = Body (...), db : AsyncSession = Depends (get_db )):
76+ await crud_remove_member (group_id , user_id , db )
77+ return {"msg" : "Member removed successfully" }
78+
79+ @router .post ("/leaveGroup" , response_model = dict )
80+ async def leave_group (model : LeaveGroup , db : AsyncSession = Depends (get_db ), user : dict = Depends (get_current_user )):
81+ group_id = model .group_id
82+ user_id = user .get ("id" )
83+ await crud_leave_group (group_id , user_id , db )
84+ return {"msg" : "You successfully left the group" }
85+
86+ # 写返回个人文件树的后端时记得加 visible = True
0 commit comments