60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
"""Запросы к таблице 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()
|