diff --git a/api/login.py b/api/login.py index af91477..af7df87 100644 --- a/api/login.py +++ b/api/login.py @@ -18,7 +18,7 @@ from config.constant import BusinessType from config.constant import RedisKeyConfig from controller.login import CustomOAuth2PasswordRequestForm, LoginController from controller.query import QueryController -from models import Department, User, Role, UserRole +from models import Department, User, Role, UserRole, LoginLog, OperationLog from schemas.common import BaseResponse from schemas.login import LoginParams, GetUserInfoResponse, LoginResponse, GetCaptchaResponse, GetEmailCodeParams, \ ResetPasswordParams @@ -271,3 +271,31 @@ async def logout(request: Request, status: bool = Depends(LoginController.logout if status: return Response.success(data="退出成功!") return Response.error(data="登出失败!") + + +@loginAPI.post("/unsubscribe", response_class=JSONResponse, response_model=BaseResponse, summary="用户注销") +@Log(title="用户注销", business_type=BusinessType.FORCE) +async def unsubscribe(request: Request, current_user: dict = Depends(LoginController.get_current_user)): + id = current_user.get("id") + session_id = current_user.get("session_id") + if user := await User.get_or_none(id=id, del_flag=1): + user.del_flag = 0 + await user.save() + redis_token = await request.app.state.redis.get(f'{RedisKeyConfig.ACCESS_TOKEN.key}:{session_id}') + if redis_token: + await request.app.state.redis.delete(f'{RedisKeyConfig.ACCESS_TOKEN.key}:{session_id}') + # 移除用户角色 + await UserRole.filter(user_id=user.id, del_flag=1).update(del_flag=0) + # 移除用户登录日志 + await LoginLog.filter(user_id=user.id, del_flag=1).update(del_flag=0) + # 移除用户操作日志 + await OperationLog.filter(user_id=user.id, del_flag=1).update(del_flag=0) + # 更新用户信息缓存 + if await request.app.state.redis.get(f'{RedisKeyConfig.USER_INFO.key}:{id}'): + await request.app.state.redis.delete(f'{RedisKeyConfig.USER_INFO.key}:{id}') + # 更新用户路由缓存 + if await request.app.state.redis.get(f'{RedisKeyConfig.USER_ROUTES.key}:{id}'): + await request.app.state.redis.delete(f'{RedisKeyConfig.USER_ROUTES.key}:{id}') + return Response.success(data="注销成功!") + else: + return Response.error(data="注销失败!")