97 lines
4.6 KiB
Python
97 lines
4.6 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.orm import Session
|
|
from Models.DepartmentModel import Department
|
|
from Models.PostModel import Post
|
|
from Schemas import UserSchemas
|
|
from Crud import UserCrud, AuthCrud
|
|
from Schemas.UserSchemas import TokenData
|
|
from Utils.AuthUtils import token_data_depend, create_token
|
|
from Utils.CrudUtils import auto_create_crud
|
|
from Utils.SqlAlchemyUtils import get_db
|
|
from Utils.VerifyCodeUtils import EmailVerifyCode, EmailVerifyType
|
|
from Utils.wxAppUtils import code2Session
|
|
|
|
router = APIRouter(
|
|
prefix="/api/daily/user"
|
|
)
|
|
|
|
|
|
# 授权登录后调用的接口,
|
|
@router.post('/login_to_app', summary="应用登录", tags=["用户接口"], response_model=UserSchemas.LoginToAppRes)
|
|
def login_to_app(req: UserSchemas.LoginToAppReq, db: Session = Depends(get_db)):
|
|
openid = code2Session(req.code).openid
|
|
if not openid:
|
|
raise HTTPException(detail="code无效", status_code=303)
|
|
user = UserCrud.get_user_info(db, openid)
|
|
if not user:
|
|
user = UserCrud.create_user(db, openid)
|
|
auth_data = AuthCrud.get_user_auth(db, openid)
|
|
user_data = user.to_dict()
|
|
user_data["auth_data"] = auth_data
|
|
token_data = TokenData(**user_data)
|
|
token = create_token(token_data.dict())
|
|
return UserSchemas.LoginToAppRes(**user.to_dict(), token=token)
|
|
|
|
|
|
@router.post('/get_user_info', summary='获取用户信息', tags=["用户接口"], response_model=UserSchemas.GetUserInfoRes)
|
|
def get_user_info(token_data: TokenData = Depends(token_data_depend), db: Session = Depends(get_db)):
|
|
user = UserCrud.get_user_info(db, token_data.openid)
|
|
return UserSchemas.GetUserInfoRes(**user.to_dict())
|
|
|
|
|
|
# 修改用户的邮箱、姓名、部门信息,需要进行邮箱验证码验证
|
|
@router.post('/change_user_info_and_email', tags=["用户接口"], summary='修改用户信息及email')
|
|
def change_user_info_and_email(req: UserSchemas.ChangeUserInfoReq, token_data: TokenData = Depends(token_data_depend),
|
|
db: Session = Depends(get_db)):
|
|
checked = EmailVerifyCode.check_code(req.email, req.email_code, EmailVerifyType.change)
|
|
if not checked:
|
|
raise HTTPException(detail="邮箱验证码错误", status_code=303)
|
|
if token_data.openid != req.openid:
|
|
raise HTTPException(detail="无权限的操作", status_code=303)
|
|
user = UserCrud.change_user_info(db, token_data.openid, UserSchemas.UserInfoChange(**req.dict(), registered=True))
|
|
auth_data = AuthCrud.get_user_auth(db, token_data.openid)
|
|
user_data = user.to_dict()
|
|
user_data["auth_data"] = auth_data
|
|
new_token_data = TokenData(**user_data)
|
|
token = create_token(new_token_data.dict(), auth_data=auth_data)
|
|
return {'msg': "修改成功", 'state': 1, 'data': {'token': token}}
|
|
|
|
|
|
@router.post('/change_user_info', tags=["用户接口"], summary='修改用户信息')
|
|
def change_user_info(req: UserSchemas.ChangeUserInfoReq, token_data: TokenData = Depends(token_data_depend),
|
|
db: Session = Depends(get_db)):
|
|
if token_data.openid != req.openid:
|
|
raise HTTPException(detail="无权限的操作", status_code=303)
|
|
UserCrud.change_user_info(db, token_data.openid, UserSchemas.UserInfoChange(**req.dict()))
|
|
return {'msg': "修改成功", 'state': 1}
|
|
|
|
|
|
@router.post('/bind_email', tags=["用户接口"], summary='绑定email')
|
|
def bind_email(req: UserSchemas.BindEmailReq, token_data: TokenData = Depends(token_data_depend),
|
|
db: Session = Depends(get_db)):
|
|
checked = EmailVerifyCode.check_code(req.email, req.email_code, EmailVerifyType.change)
|
|
if not checked:
|
|
raise HTTPException(detail="邮箱验证码错误", status_code=303)
|
|
UserCrud.update_user_info_from_email(db, token_data.openid, req.email)
|
|
auth_data = AuthCrud.get_user_auth(db, token_data.openid)
|
|
user = UserCrud.get_user_info(db, token_data.openid)
|
|
user_data = user.to_dict()
|
|
user_data["auth_data"] = auth_data
|
|
token_data = TokenData(**user_data)
|
|
token = create_token(token_data)
|
|
return {'msg': "修改成功", 'state': 1, 'data': {'token': token}}
|
|
|
|
|
|
@router.post("/get_email_verify_code", tags=["用户接口"], summary="获取邮箱验证码")
|
|
def get_email_verify_code(body: UserSchemas.EmailSendReqBody):
|
|
email = body.email
|
|
EmailVerifyCode.send_change_code(email)
|
|
return {"msg": "验证码已发送至邮箱,请查看", "state": 1}
|
|
|
|
|
|
department_crud = auto_create_crud(Department, 'department', "部门", auto_create_keys=['id'], tags=["部门职务操作"])
|
|
post_crud = auto_create_crud(Post, 'post', "职务", auto_create_keys=['id'], tags=["部门职务操作"])
|
|
department_crud.mount(router)
|
|
post_crud.mount(router)
|
|
|