fix: system messages go to project chat (visible in ChatPanel)
Some checks failed
Deploy Tracker / deploy (push) Failing after 1s

This commit is contained in:
markov 2026-02-24 12:22:51 +01:00
parent f7ee6d1a7c
commit b527e19db1

View File

@ -10,7 +10,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import selectinload, joinedload
from tracker.database import get_db
from tracker.models import Task, Step, Project, Member, Message
from tracker.models import Task, Step, Project, Member, Message, Chat
router = APIRouter(tags=["tasks"])
@ -81,9 +81,24 @@ class AssignRequest(BaseModel):
# --- Helpers ---
async def _system_message(db: AsyncSession, task: Task, content: str, project_slug: str = ""):
"""Create a system message for a task and broadcast it via WS."""
"""Create a system message for a task and broadcast it via WS.
Message goes to the project chat (visible in ChatPanel) with task_id reference.
"""
from tracker.ws.manager import manager
# Find project chat
chat_id = None
if task.project_id:
result = await db.execute(
select(Chat).where(Chat.project_id == task.project_id, Chat.kind == "project")
)
chat = result.scalar_one_or_none()
if chat:
chat_id = chat.id
msg = Message(
chat_id=chat_id,
task_id=task.id,
author_type="system",
author_slug="system",
@ -96,15 +111,17 @@ async def _system_message(db: AsyncSession, task: Task, content: str, project_sl
prefix = project_slug[:2].upper() if project_slug else "XX"
key = f"{prefix}-{task.number}"
await manager.broadcast_task_event(str(task.project_id), "message.new", {
event_data = {
"id": str(msg.id),
"chat_id": str(chat_id) if chat_id else None,
"task_id": str(task.id),
"task_key": key,
"author_type": "system",
"author_slug": "system",
"content": content,
"created_at": msg.created_at.isoformat() if msg.created_at else "",
})
}
await manager.broadcast_task_event(str(task.project_id), "message.new", event_data)
def _task_out(t: Task, project_slug: str = "") -> dict: