intra_max_chatbot/database/queries/task_watch.py

60 lines
2.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Запросы к таблице task_watch — слежение за задачами для push-уведомлений."""
from database.connection import get_db
async def get_watched_clients() -> list[dict]:
"""Все организации с привязанным intradesk_id."""
db = get_db()
async with db.execute(
"SELECT id AS org_id, intradesk_id FROM organizations WHERE intradesk_id IS NOT NULL"
) as cur:
rows = await cur.fetchall()
return [dict(r) for r in rows]
async def get_task_watch(task_id: int) -> dict | None:
"""Получить состояние слежения для одной задачи."""
db = get_db()
async with db.execute(
"SELECT * FROM task_watch WHERE task_id = ?", (task_id,)
) as cur:
row = await cur.fetchone()
return dict(row) if row else None
async def upsert_task_watch(
task_id: int,
client_id: int,
task_number: int | None,
last_updatedat: str,
last_comment_date: str,
) -> None:
"""Создать или обновить запись слежения."""
db = get_db()
await db.execute(
"""
INSERT INTO task_watch (task_id, client_id, task_number, last_updatedat, last_comment_date)
VALUES (?, ?, ?, ?, ?)
ON CONFLICT(task_id) DO UPDATE SET
last_updatedat = excluded.last_updatedat,
last_comment_date = excluded.last_comment_date,
task_number = COALESCE(excluded.task_number, task_number)
""",
(task_id, client_id, task_number, last_updatedat, last_comment_date),
)
await db.commit()
async def remove_tasks_not_in(client_id: int, task_ids: set[int]) -> None:
"""Удалить закрытые/архивные задачи клиента из слежения."""
db = get_db()
if task_ids:
placeholders = ",".join("?" * len(task_ids))
await db.execute(
f"DELETE FROM task_watch WHERE client_id = ? AND task_id NOT IN ({placeholders})",
(client_id, *task_ids),
)
else:
# Все задачи закрыты — убираем всё по клиенту
await db.execute("DELETE FROM task_watch WHERE client_id = ?", (client_id,))
await db.commit()