import os from pathlib import Path from fastapi import APIRouter, Depends, HTTPException, UploadFile, File from sqlalchemy.orm import Session from Crud import UserCrud from Schemas import UserSchemas from Schemas.UserSchemas import TokenData from Utils.AuthUtils import token_data_depend from Utils.CommonUtils import file_md5 from Utils.SqlAlchemyUtils import get_db router = APIRouter( tags=["用户操作"], prefix="/api/user_mod/user", dependencies=[Depends(token_data_depend)] ) @router.post("/get_user_info", summary="获取用户信息", response_model=UserSchemas.UserInfo) def get_user_info(token_data: TokenData = Depends(token_data_depend), db: Session = Depends(get_db)): user_id = token_data.uid user = UserCrud.get_user_by_id(db, user_id) if not user: raise HTTPException(404, detail="未找到用户信息") user_info = user.as_info() return user_info @router.post('/avatar_upload', summary="用户头像上传") def avatar_upload(file: UploadFile = File(...), token_data: TokenData = Depends(token_data_depend), db: Session = Depends(get_db)): if file.content_type not in ['image/png', 'image/jpeg']: raise Exception('图片格式应为png和jpg') contents = file.file.read(1024 * 201) if len(contents) > 1024 * 200: raise Exception("文件大小不能大于200kb") save_path = Path("static_data/user/avatar") if not os.path.exists(save_path): os.makedirs(save_path) file_md = file_md5(contents) if not os.path.exists(save_path / file_md): with open(save_path / file_md, 'wb') as f: f.write(contents) file_url_path = f"/static_data/user/avatar/{file_md}" UserCrud.change_user_info(db, token_data.uid, {'avatar': file_url_path}) return {"msg": "上传成功", "state": 1} @router.post("/change_user_info", summary="修改用户信息") def change_user_info(body: UserSchemas.UserChangeInfo, token_data: TokenData = Depends(token_data_depend), db: Session = Depends(get_db)): data = body.dict() for key in ['role','department','post','auth_data']: if key in data: del data[key] UserCrud.change_user_info(db, token_data.uid, data) return {"msg": "修改成功", "state": 1} @router.post("/change_user_info_by_key", summary="通过key修改用户信息") def change_user_info_by_key(body: UserSchemas.UserChangeInfoByKey, db: Session = Depends(get_db)): UserCrud.change_user_info_by_key(db, body.id, body.key, body.value) return {"msg": "修改成功", "state": 1}