Skip to content

Commit ec3434c

Browse files
committed
fix: 修复模型字段缺失和语法错误
- Conversation模型添加tags字段 - Keyword模型添加synonyms字段 - Alert模型添加assignee/assignee_note/assigned_at字段 - 修复senders.py/conversations.py/alerts.py语法错误 - 修复会话标签列表查询(MySQL JSON列兼容)
1 parent 4dd83e6 commit ec3434c

5 files changed

Lines changed: 55 additions & 40 deletions

File tree

backend/app/api/alerts.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -598,7 +598,7 @@ async def assign_alert(
598598
result = await db.execute(select(Alert).where(Alert.id == alert_id))
599599
alert = result.scalar_one_or_none()
600600
if not alert:
601-
raise HTTPException(status_code=404, detail=告警不存在)
601+
raise HTTPException(status_code=404, detail="告警不存在")
602602
alert.assignee = assignee
603603
alert.assignee_note = note
604604
alert.assigned_at = now_utc()

backend/app/api/conversations.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -869,13 +869,22 @@ async def add_all_channels_from_account(
869869
@router.get("/tags/list")
870870
async def list_all_tags(db: AsyncSession = Depends(get_db)):
871871
"""获取所有标签(去重)"""
872+
from sqlalchemy import text
872873
result = await db.execute(
873-
select(Conversation.tags).where(Conversation.tags.isnot(None))
874+
text("SELECT tags FROM conversations WHERE tags IS NOT NULL AND tags != 'null'")
874875
)
875876
all_tags = set()
876-
for row in result.scalars().all():
877-
if row and isinstance(row, list):
878-
all_tags.update(row)
877+
for row in result.all():
878+
tags = row[0]
879+
if tags:
880+
import json
881+
try:
882+
if isinstance(tags, str):
883+
tags = json.loads(tags)
884+
if isinstance(tags, list):
885+
all_tags.update(tags)
886+
except (json.JSONDecodeError, TypeError):
887+
pass
879888
return sorted(all_tags)
880889

881890

@@ -891,7 +900,7 @@ async def update_conversation_tags(
891900
)
892901
conv = result.scalar_one_or_none()
893902
if not conv:
894-
raise HTTPException(status_code=404, detail=会话不存在)
903+
raise HTTPException(status_code=404, detail="会话不存在")
895904
conv.tags = tags
896905
await db.commit()
897-
return {message: 标签已更新, tags: tags}
906+
return {"message": "标签已更新", "tags": tags}

backend/app/api/senders.py

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,13 @@ async def get_sender_detail(
9595
sender_id: int,
9696
db: AsyncSession = Depends(get_db),
9797
):
98-
获取发送者详情
98+
"""获取发送者详情"""
9999
from app.models.message import Message
100100
result = await db.execute(select(Sender).where(Sender.id == sender_id))
101101
sender = result.scalar_one_or_none()
102102
if not sender:
103103
from fastapi import HTTPException
104-
raise HTTPException(status_code=404, detail=发送者不存在)
104+
raise HTTPException(status_code=404, detail="发送者不存在")
105105

106106
# 实时统计告警数
107107
alert_count_result = await db.execute(
@@ -118,19 +118,19 @@ async def get_sender_detail(
118118
message_types = {row[0]: row[1] for row in type_result.all()}
119119

120120
return {
121-
id: sender.id,
122-
user_id: sender.user_id,
123-
username: sender.username,
124-
first_name: sender.first_name,
125-
last_name: sender.last_name,
126-
phone: sender.phone,
127-
is_bot: sender.is_bot,
128-
is_verified: sender.is_verified,
129-
is_premium: sender.is_premium,
130-
message_count: sender.message_count,
131-
alert_count: alert_count,
132-
message_types: message_types,
133-
created_at: sender.created_at.isoformat() if sender.created_at else None,
121+
"id": sender.id,
122+
"user_id": sender.user_id,
123+
"username": sender.username,
124+
"first_name": sender.first_name,
125+
"last_name": sender.last_name,
126+
"phone": sender.phone,
127+
"is_bot": sender.is_bot,
128+
"is_verified": sender.is_verified,
129+
"is_premium": sender.is_premium,
130+
"message_count": sender.message_count,
131+
"alert_count": alert_count,
132+
"message_types": message_types,
133+
"created_at": sender.created_at.isoformat() if sender.created_at else None,
134134
}
135135

136136

@@ -141,15 +141,15 @@ async def get_sender_messages(
141141
page_size: int = Query(20, ge=1, le=100),
142142
db: AsyncSession = Depends(get_db),
143143
):
144-
获取发送者的消息历史
144+
"""获取发送者的消息历史"""
145145
from app.models.message import Message
146146
from app.models.conversation import Conversation
147147

148148
# 验证发送者存在
149149
sender_result = await db.execute(select(Sender).where(Sender.id == sender_id))
150150
if not sender_result.scalar_one_or_none():
151151
from fastapi import HTTPException
152-
raise HTTPException(status_code=404, detail=发送者不存在)
152+
raise HTTPException(status_code=404, detail="发送者不存在")
153153

154154
# 总数
155155
count_result = await db.execute(
@@ -172,23 +172,23 @@ async def get_sender_messages(
172172
items = []
173173
for msg, conv_title in rows:
174174
items.append({
175-
id: msg.id,
176-
conversation_id: msg.conversation_id,
177-
conversation_title: conv_title,
178-
message_type: msg.message_type,
179-
text: msg.text,
180-
caption: msg.caption,
181-
date: msg.date.isoformat() if msg.date else None,
182-
views: msg.views,
183-
forwards: msg.forwards,
184-
has_media: msg.has_media,
185-
is_reply: msg.is_reply,
175+
"id": msg.id,
176+
"conversation_id": msg.conversation_id,
177+
"conversation_title": conv_title,
178+
"message_type": msg.message_type,
179+
"text": msg.text,
180+
"caption": msg.caption,
181+
"date": msg.date.isoformat() if msg.date else None,
182+
"views": msg.views,
183+
"forwards": msg.forwards,
184+
"has_media": msg.has_media,
185+
"is_reply": msg.is_reply,
186186
})
187187

188188
return {
189-
items: items,
190-
total: total,
191-
page: page,
192-
page_size: page_size,
193-
total_pages: (total + page_size - 1) // page_size if total else 0,
189+
"items": items,
190+
"total": total,
191+
"page": page,
192+
"page_size": page_size,
193+
"total_pages": (total + page_size - 1) // page_size if total else 0,
194194
}

backend/app/models/conversation.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ class Conversation(Base):
5858
# 元数据
5959
created_at = Column(DateTime, server_default=func.now())
6060
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())
61+
# 标签
62+
tags = Column(JSON, comment="标签列表")
63+
6164
note = Column(Text)
6265
extra = Column(JSON)
6366

backend/app/models/keyword.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ class KeywordGroup(Base):
4848
total_keywords = Column(Integer, default=0, comment="关键词数量")
4949
total_matches = Column(Integer, default=0, comment="总匹配次数")
5050

51+
# 同义词扩展
52+
synonyms = Column(JSON, comment="同义词列表")
53+
5154
# 元数据
5255
created_at = Column(DateTime, server_default=func.now(), comment="创建时间")
5356
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment="更新时间")

0 commit comments

Comments
 (0)