66 lines
2.5 KiB
Python
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}
|