usermod/Router/UserRouter.py

66 lines
2.5 KiB
Python

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}