- Added `status` query parameter to `list_sessions_api` for filtering sessions by their status (active/closed). - Introduced `close_all_sessions_api` endpoint to allow users to close all active sessions for the current actor. - Updated `SessionRepository` to support status filtering in session listing and implemented logic for closing active sessions. - Improved Redis connection settings for better performance and reliability. This update enhances the chat functionality by providing more control over session management, improving user experience and system efficiency.
45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
"""MySQL / Redis 连接工厂。"""
|
|
|
|
from functools import lru_cache
|
|
|
|
import redis
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy.engine import Engine
|
|
|
|
from app.config.settings import settings
|
|
|
|
|
|
def _mysql_url(database: str) -> str:
|
|
pwd = settings.mysql_password
|
|
auth = f"{settings.mysql_user}:{pwd}" if pwd else settings.mysql_user
|
|
return (
|
|
f"mysql+pymysql://{auth}@{settings.mysql_host}:{settings.mysql_port}"
|
|
f"/{database}?charset=utf8mb4"
|
|
)
|
|
|
|
|
|
@lru_cache
|
|
def get_agent_engine() -> Engine:
|
|
return create_engine(_mysql_url(settings.mysql_database), pool_pre_ping=True)
|
|
|
|
|
|
@lru_cache
|
|
def get_core_engine() -> Engine:
|
|
return create_engine(_mysql_url(settings.mysql_core_database), pool_pre_ping=True)
|
|
|
|
|
|
def _redis_kwargs() -> dict:
|
|
"""RESP2:兼容 Windows Redis 3.x(无 HELLO);Redis 7 Docker 同样可用。"""
|
|
return {
|
|
"decode_responses": True,
|
|
"protocol": 2,
|
|
"socket_timeout": 1,
|
|
"socket_connect_timeout": 0.5,
|
|
}
|
|
|
|
|
|
@lru_cache
|
|
def get_redis_client() -> redis.Redis:
|
|
"""Redis 单例客户端(客服线 VisitorMemory / ProfileHotCache 用)。"""
|
|
return redis.from_url(settings.redis_url, **_redis_kwargs())
|