Skip to content

Commit 2dbc9b4

Browse files
perf: Enable user cache
1 parent 1488c4e commit 2dbc9b4

File tree

6 files changed

+146
-125
lines changed

6 files changed

+146
-125
lines changed

backend/apps/system/api/user.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from typing import Optional
22
from fastapi import APIRouter, HTTPException, Query
33
from sqlmodel import func, or_, select, delete as sqlmodel_delete
4-
from apps.system.crud.user import clean_user_cache, get_db_user, single_delete, user_ws_options
4+
from apps.system.crud.user import get_db_user, single_delete, user_ws_options
55
from apps.system.models.system_model import UserWsModel
66
from apps.system.models.user import UserModel
77
from apps.system.schemas.auth import CacheName, CacheNamespace
@@ -95,14 +95,13 @@ async def ws_options(session: SessionDep, current_user: CurrentUser, trans: Tran
9595
return await user_ws_options(session, current_user.id, trans)
9696

9797
@router.put("/ws/{oid}")
98-
# @clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="current_user.id")
98+
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="current_user.id")
9999
async def ws_change(session: SessionDep, current_user: CurrentUser, oid: int):
100100
ws_list: list[UserWs] = await user_ws_options(session, current_user.id)
101101
if not any(x.id == oid for x in ws_list):
102102
raise HTTPException(f"oid [{oid}] is invalid!")
103103
user_model: UserModel = get_db_user(session = session, user_id = current_user.id)
104104
user_model.oid = oid
105-
await clean_user_cache(user_model.id)
106105
session.add(user_model)
107106
session.commit()
108107

@@ -138,7 +137,7 @@ async def create(session: SessionDep, creator: UserCreator):
138137
session.commit()
139138

140139
@router.put("")
141-
#@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="editor.id")
140+
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="editor.id")
142141
async def update(session: SessionDep, editor: UserEditor):
143142
user_model: UserModel = get_db_user(session = session, user_id = editor.id)
144143
origin_oid: int = user_model.oid
@@ -174,19 +173,18 @@ async def batch_del(session: SessionDep, id_list: list[int]):
174173
await single_delete(session, id)
175174

176175
@router.put("/language")
177-
#@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="current_user.id")
176+
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="current_user.id")
178177
async def langChange(session: SessionDep, current_user: CurrentUser, language: UserLanguage):
179178
lang = language.language
180179
if lang not in ["zh-CN", "en"]:
181180
return {"message": "Language not supported"}
182181
db_user: UserModel = get_db_user(session=session, user_id=current_user.id)
183182
db_user.language = lang
184-
await clean_user_cache(db_user.id)
185183
session.add(db_user)
186184
session.commit()
187185

188186
@router.patch("/pwd/{id}")
189-
#@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="id")
187+
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="id")
190188
async def pwdReset(session: SessionDep, current_user: CurrentUser, id: int):
191189
if not current_user.isAdmin:
192190
raise HTTPException('only for admin')
@@ -196,12 +194,11 @@ async def pwdReset(session: SessionDep, current_user: CurrentUser, id: int):
196194
session.commit()
197195

198196
@router.put("/pwd")
199-
#@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="current_user.id")
197+
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="current_user.id")
200198
async def pwdUpdate(session: SessionDep, current_user: CurrentUser, editor: PwdEditor):
201199
db_user: UserModel = get_db_user(session=session, user_id=current_user.id)
202200
if not verify_md5pwd(editor.pwd, db_user.password):
203201
raise HTTPException("pwd error")
204202
db_user.password = md5pwd(editor.new_pwd)
205-
await clean_user_cache(db_user.id)
206203
session.add(db_user)
207204
session.commit()

backend/apps/system/crud/user.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def get_user_by_account(*, session: Session, account: str) -> BaseUserDTO | None
2222
return None
2323
return BaseUserDTO.model_validate(db_user.model_dump())
2424

25-
#@cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="user_id")
25+
@cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="user_id")
2626
async def get_user_info(*, session: Session, user_id: int) -> UserInfoDTO | None:
2727
db_user: UserModel = get_db_user(session = session, user_id = user_id)
2828
userInfo = UserInfoDTO.model_validate(db_user.model_dump())
@@ -58,14 +58,14 @@ async def user_ws_options(session: Session, uid: int, trans: Optional[I18n] = No
5858
for id, name in result.all()
5959
]
6060

61-
#@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="id")
61+
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="id")
6262
async def single_delete(session: SessionDep, id: int):
6363
user_model: UserModel = get_db_user(session = session, user_id = id)
6464
del_stmt = sqlmodel_delete(UserWsModel).where(UserWsModel.uid == id)
6565
session.exec(del_stmt)
6666
session.delete(user_model)
6767
session.commit()
6868

69-
#@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="id")
69+
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="id")
7070
async def clean_user_cache(id: int):
7171
SQLBotLogUtil.info(f"User cache for [{id}] has been cleaned")

backend/apps/system/middleware/auth.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ async def validateToken(self, token: Optional[str]):
7171
) """
7272
return True, session_user
7373
except Exception as e:
74-
SQLBotLogUtil.exception(f"Token validation error: {str(e)}", exc_info=True)
74+
SQLBotLogUtil.exception(f"Token validation error: {str(e)}")
7575
return False, e
7676

7777

@@ -97,6 +97,6 @@ async def validateAssistant(self, assistantToken: Optional[str]) -> tuple[any]:
9797
assistant_info = AssistantHeader.model_validate(assistant_info.model_dump(exclude_unset=True))
9898
return True, session_user, assistant_info
9999
except Exception as e:
100-
SQLBotLogUtil.exception(f"Assistant validation error: {str(e)}", exc_info=True)
100+
SQLBotLogUtil.exception(f"Assistant validation error: {str(e)}")
101101
# Return False and the exception message
102102
return False, e

backend/common/core/response_middleware.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ async def dispatch(self, request, call_next):
6868
class exception_handler():
6969
@staticmethod
7070
async def http_exception_handler(request: Request, exc: HTTPException):
71-
SQLBotLogUtil.exception(f"HTTP Exception: {exc.detail}", exc_info=True)
71+
SQLBotLogUtil.error(f"HTTP Exception: {exc.detail}", exc_info=True)
7272
return JSONResponse(
7373
status_code=exc.status_code,
7474
content={
@@ -82,7 +82,7 @@ async def http_exception_handler(request: Request, exc: HTTPException):
8282

8383
@staticmethod
8484
async def global_exception_handler(request: Request, exc: Exception):
85-
SQLBotLogUtil.exception(f"Unhandled Exception: {str(exc)}", exc_info=True)
85+
SQLBotLogUtil.error(f"Unhandled Exception: {str(exc)}", exc_info=True)
8686
return JSONResponse(
8787
status_code=500,
8888
content={

0 commit comments

Comments
 (0)