diff --git a/scripts/migrate_business_from_sqlite.py b/scripts/migrate_business_from_sqlite.py index 1fcb338f..252ee2d0 100644 --- a/scripts/migrate_business_from_sqlite.py +++ b/scripts/migrate_business_from_sqlite.py @@ -30,7 +30,7 @@ from typing import Any sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) os.environ.setdefault("YUXI_SKIP_APP_INIT", "1") -from sqlalchemy import Boolean, Column, DateTime, Integer, String, Text, create_engine, select, text +from sqlalchemy import Column, DateTime, Integer, String, Text, create_engine, select, text from sqlalchemy.orm import declarative_base, sessionmaker from src import config diff --git a/server/routers/auth_router.py b/server/routers/auth_router.py index 4e75d456..59d7ba67 100644 --- a/server/routers/auth_router.py +++ b/server/routers/auth_router.py @@ -23,10 +23,7 @@ from server.utils.auth_utils import AuthUtils from server.utils.user_utils import generate_unique_user_id, validate_username, is_valid_phone_number from server.utils.common_utils import log_operation from src.storage.minio import aupload_file_to_minio -from datetime import datetime as dt, UTC - -# 使用 naive datetime 以兼容 PostgreSQL TIMESTAMP WITHOUT TIME ZONE 列 -_utc_now = lambda: dt.now(UTC).replace(tzinfo=None) +from src.utils.datetime_utils import utc_now_naive # 创建路由器 auth = APIRouter(prefix="/auth", tags=["authentication"]) @@ -180,7 +177,7 @@ async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends( # 登录成功,重置失败计数器 user.reset_failed_login() - user.last_login = _utc_now() + user.last_login = utc_now_naive() await db.commit() # 生成访问令牌 @@ -270,7 +267,7 @@ async def initialize_admin(admin_data: InitializeAdmin, db: AsyncSession = Depen "password_hash": hashed_password, "role": "superadmin", "department_id": default_department.id, - "last_login": _utc_now(), + "last_login": utc_now_naive(), } ) @@ -679,7 +676,7 @@ async def delete_user( hash_suffix = hashlib.md5(user.user_id.encode()).hexdigest()[:4] user.is_deleted = 1 - user.deleted_at = _utc_now() + user.deleted_at = utc_now_naive() user.username = f"已注销用户-{hash_suffix}" user.phone_number = None # 清空手机号,释放该手机号供其他用户使用 user.password_hash = "DELETED" # 禁止登录 diff --git a/src/repositories/evaluation_repository.py b/src/repositories/evaluation_repository.py index 03f61f74..c51d9cbe 100644 --- a/src/repositories/evaluation_repository.py +++ b/src/repositories/evaluation_repository.py @@ -4,8 +4,8 @@ from typing import Any from sqlalchemy import delete, select -from src.storage.postgres.models_knowledge import EvaluationBenchmark, EvaluationResult, EvaluationResultDetail from src.storage.postgres.manager import pg_manager +from src.storage.postgres.models_knowledge import EvaluationBenchmark, EvaluationResult, EvaluationResultDetail class EvaluationRepository: diff --git a/src/repositories/knowledge_base_repository.py b/src/repositories/knowledge_base_repository.py index 63b0c239..ef591750 100644 --- a/src/repositories/knowledge_base_repository.py +++ b/src/repositories/knowledge_base_repository.py @@ -4,8 +4,8 @@ from typing import Any from sqlalchemy import select -from src.storage.postgres.models_knowledge import KnowledgeBase from src.storage.postgres.manager import pg_manager +from src.storage.postgres.models_knowledge import KnowledgeBase class KnowledgeBaseRepository: diff --git a/src/repositories/knowledge_file_repository.py b/src/repositories/knowledge_file_repository.py index 5ac97362..520a5448 100644 --- a/src/repositories/knowledge_file_repository.py +++ b/src/repositories/knowledge_file_repository.py @@ -4,8 +4,8 @@ from typing import Any from sqlalchemy import select -from src.storage.postgres.models_knowledge import KnowledgeFile from src.storage.postgres.manager import pg_manager +from src.storage.postgres.models_knowledge import KnowledgeFile class KnowledgeFileRepository: diff --git a/src/repositories/task_repository.py b/src/repositories/task_repository.py index 8e8af1dd..5f089f64 100644 --- a/src/repositories/task_repository.py +++ b/src/repositories/task_repository.py @@ -43,4 +43,3 @@ class TaskRepository: async def delete_all(self) -> None: async with pg_manager.get_async_session_context() as session: await session.execute(delete(TaskRecord)) - diff --git a/src/services/evaluation_service.py b/src/services/evaluation_service.py index 6720facb..1280fac7 100644 --- a/src/services/evaluation_service.py +++ b/src/services/evaluation_service.py @@ -6,11 +6,11 @@ import uuid from datetime import datetime from typing import Any -from src.services.task_service import TaskContext, tasker from src.knowledge import knowledge_base from src.models import select_model from src.repositories.evaluation_repository import EvaluationRepository from src.repositories.knowledge_base_repository import KnowledgeBaseRepository +from src.services.task_service import TaskContext, tasker from src.utils import logger from src.utils.evaluation_metrics import EvaluationMetricsCalculator diff --git a/src/services/task_service.py b/src/services/task_service.py index a23b3dbd..d4741b6c 100644 --- a/src/services/task_service.py +++ b/src/services/task_service.py @@ -326,4 +326,3 @@ tasker = Tasker() __all__ = ["tasker", "TaskContext", "Tasker"] - diff --git a/src/storage/postgres/manager.py b/src/storage/postgres/manager.py index 9a7647eb..49cd67ca 100644 --- a/src/storage/postgres/manager.py +++ b/src/storage/postgres/manager.py @@ -9,8 +9,8 @@ from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_asyn from sqlalchemy.orm import declarative_base from server.utils.singleton import SingletonMeta -from src.storage.postgres.models_knowledge import Base as KnowledgeBase from src.storage.postgres.models_business import Base as BusinessBase +from src.storage.postgres.models_knowledge import Base as KnowledgeBase from src.utils import logger # 合并两个 Base