fix(datetime): 统一时间戳字段的导入方式,使用 datetime 模块别名

- 将所有时间戳字段的导入方式统一为使用 datetime 模块的别名 dt,确保代码一致性
- 更新了 ConversationManager 和数据库模型中的时间戳字段,确保使用正确的 UTC 时间
This commit is contained in:
Wenjie Zhang 2025-10-04 23:03:41 +08:00
parent 804bcc1abc
commit a3028d17b5
2 changed files with 16 additions and 16 deletions

View File

@ -4,8 +4,8 @@ Conversation Storage Manager
Manages conversation data storage including messages, tool calls, and statistics. Manages conversation data storage including messages, tool calls, and statistics.
""" """
import datetime as dt
import uuid import uuid
from datetime import datetime
from sqlalchemy.orm import Session, joinedload from sqlalchemy.orm import Session, joinedload
@ -259,7 +259,7 @@ class ConversationManager:
current_metadata.update(metadata) current_metadata.update(metadata)
conversation.extra_metadata = current_metadata conversation.extra_metadata = current_metadata
conversation.updated_at = datetime.now(datetime.UTC) conversation.updated_at = dt.datetime.now(dt.UTC)
self.db.commit() self.db.commit()
self.db.refresh(conversation) self.db.refresh(conversation)
@ -334,7 +334,7 @@ class ConversationManager:
if user_feedback is not None: if user_feedback is not None:
stats.user_feedback = user_feedback stats.user_feedback = user_feedback
stats.updated_at = datetime.now(datetime.UTC) stats.updated_at = dt.datetime.now(dt.UTC)
self.db.commit() self.db.commit()
self.db.refresh(stats) self.db.refresh(stats)

View File

@ -1,5 +1,5 @@
import datetime as dt
import time import time
from datetime import datetime
from sqlalchemy import JSON, Column, DateTime, ForeignKey, Integer, String, Text from sqlalchemy import JSON, Column, DateTime, ForeignKey, Integer, String, Text
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
@ -20,7 +20,7 @@ class KnowledgeDatabase(Base):
embed_model = Column(String, nullable=True) # 嵌入模型名称 embed_model = Column(String, nullable=True) # 嵌入模型名称
dimension = Column(Integer, nullable=True) # 向量维度 dimension = Column(Integer, nullable=True) # 向量维度
meta_info = Column(JSON, nullable=True) # 元数据 meta_info = Column(JSON, nullable=True) # 元数据
created_at = Column(DateTime, default=lambda: datetime.now(datetime.UTC)) # 创建时间 created_at = Column(DateTime, default=lambda: dt.datetime.now(dt.UTC)) # 创建时间
# 关系 # 关系
files = relationship("KnowledgeFile", back_populates="database", cascade="all, delete-orphan") files = relationship("KnowledgeFile", back_populates="database", cascade="all, delete-orphan")
@ -57,7 +57,7 @@ class KnowledgeFile(Base):
path = Column(String, nullable=False) # 文件路径 path = Column(String, nullable=False) # 文件路径
file_type = Column(String, nullable=False) # 文件类型 file_type = Column(String, nullable=False) # 文件类型
status = Column(String, nullable=False) # 处理状态 status = Column(String, nullable=False) # 处理状态
created_at = Column(DateTime, default=lambda: datetime.now(datetime.UTC)) # 创建时间 created_at = Column(DateTime, default=lambda: dt.datetime.now(dt.UTC)) # 创建时间
# 关系 # 关系
database = relationship("KnowledgeDatabase", back_populates="files") database = relationship("KnowledgeDatabase", back_populates="files")
@ -124,11 +124,11 @@ class Conversation(Base):
agent_id = Column(String(64), index=True, nullable=False, comment="Agent ID") agent_id = Column(String(64), index=True, nullable=False, comment="Agent ID")
title = Column(String(255), nullable=True, comment="Conversation title") title = Column(String(255), nullable=True, comment="Conversation title")
status = Column(String(20), default="active", comment="Status: active/archived/deleted") status = Column(String(20), default="active", comment="Status: active/archived/deleted")
created_at = Column(DateTime, default=lambda: datetime.now(datetime.UTC), comment="Creation time") created_at = Column(DateTime, default=lambda: dt.datetime.now(dt.UTC), comment="Creation time")
updated_at = Column( updated_at = Column(
DateTime, DateTime,
default=lambda: datetime.now(datetime.UTC), default=lambda: dt.datetime.now(dt.UTC),
onupdate=lambda: datetime.now(datetime.UTC), onupdate=lambda: dt.datetime.now(dt.UTC),
comment="Update time", comment="Update time",
) )
extra_metadata = Column(JSON, nullable=True, comment="Additional metadata") extra_metadata = Column(JSON, nullable=True, comment="Additional metadata")
@ -165,7 +165,7 @@ class Message(Base):
role = Column(String(20), nullable=False, comment="Message role: user/assistant/system/tool") role = Column(String(20), nullable=False, comment="Message role: user/assistant/system/tool")
content = Column(Text, nullable=False, comment="Message content") content = Column(Text, nullable=False, comment="Message content")
message_type = Column(String(30), default="text", comment="Message type: text/tool_call/tool_result") message_type = Column(String(30), default="text", comment="Message type: text/tool_call/tool_result")
created_at = Column(DateTime, default=lambda: datetime.now(datetime.UTC), comment="Creation time") created_at = Column(DateTime, default=lambda: dt.datetime.now(dt.UTC), comment="Creation time")
token_count = Column(Integer, nullable=True, comment="Token count (optional)") token_count = Column(Integer, nullable=True, comment="Token count (optional)")
extra_metadata = Column(JSON, nullable=True, comment="Additional metadata (complete message dump)") extra_metadata = Column(JSON, nullable=True, comment="Additional metadata (complete message dump)")
@ -202,7 +202,7 @@ class ToolCall(Base):
tool_output = Column(Text, nullable=True, comment="Tool execution result") tool_output = Column(Text, nullable=True, comment="Tool execution result")
status = Column(String(20), default="pending", comment="Status: pending/success/error") status = Column(String(20), default="pending", comment="Status: pending/success/error")
error_message = Column(Text, nullable=True, comment="Error message if failed") error_message = Column(Text, nullable=True, comment="Error message if failed")
created_at = Column(DateTime, default=lambda: datetime.now(datetime.UTC), comment="Creation time") created_at = Column(DateTime, default=lambda: dt.datetime.now(dt.UTC), comment="Creation time")
# Relationships # Relationships
message = relationship("Message", back_populates="tool_calls") message = relationship("Message", back_populates="tool_calls")
@ -234,11 +234,11 @@ class ConversationStats(Base):
total_tokens = Column(Integer, default=0, comment="Total tokens used") total_tokens = Column(Integer, default=0, comment="Total tokens used")
model_used = Column(String(100), nullable=True, comment="Model used") model_used = Column(String(100), nullable=True, comment="Model used")
user_feedback = Column(JSON, nullable=True, comment="User feedback") user_feedback = Column(JSON, nullable=True, comment="User feedback")
created_at = Column(DateTime, default=lambda: datetime.now(datetime.UTC), comment="Creation time") created_at = Column(DateTime, default=lambda: dt.datetime.now(dt.UTC), comment="Creation time")
updated_at = Column( updated_at = Column(
DateTime, DateTime,
default=lambda: datetime.now(datetime.UTC), default=lambda: dt.datetime.now(dt.UTC),
onupdate=lambda: datetime.now(datetime.UTC), onupdate=lambda: dt.datetime.now(dt.UTC),
comment="Update time", comment="Update time",
) )
@ -270,7 +270,7 @@ class User(Base):
avatar = Column(String, nullable=True) # 头像URL avatar = Column(String, nullable=True) # 头像URL
password_hash = Column(String, nullable=False) password_hash = Column(String, nullable=False)
role = Column(String, nullable=False, default="user") # 角色: superadmin, admin, user role = Column(String, nullable=False, default="user") # 角色: superadmin, admin, user
created_at = Column(DateTime, default=lambda: datetime.now(datetime.UTC)) created_at = Column(DateTime, default=lambda: dt.datetime.now(dt.UTC))
last_login = Column(DateTime, nullable=True) last_login = Column(DateTime, nullable=True)
# 登录失败限制相关字段 # 登录失败限制相关字段
@ -355,7 +355,7 @@ class OperationLog(Base):
operation = Column(String, nullable=False) operation = Column(String, nullable=False)
details = Column(Text, nullable=True) details = Column(Text, nullable=True)
ip_address = Column(String, nullable=True) ip_address = Column(String, nullable=True)
timestamp = Column(DateTime, default=lambda: datetime.now(datetime.UTC)) timestamp = Column(DateTime, default=lambda: dt.datetime.now(dt.UTC))
# 关联用户 # 关联用户
user = relationship("User", back_populates="operation_logs") user = relationship("User", back_populates="operation_logs")