2026-09-07 19:43:48 +03:00

225 lines
8.6 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.

class NotificationVerbs:
TASK_CREATED = "task_created"
TASK_ASSIGNED = "task_assigned"
TASK_REASSIGNED = "task_reassigned"
TASK_COMMENT = "task_comment"
TASK_DUE_DATE_CHANGED = "task_due_date_changed"
TASK_DUE_SOON = "task_due_soon"
TASK_OVERDUE = "task_overdue"
TASK_COMPLETED = "task_completed"
TASK_REOPENED = "task_reopened"
TASK_UPDATED = "task_updated"
TASK_MOVED = "task_moved"
TASK_DELETED = "task_deleted"
TASK_ATTACHMENT_ADDED = "task_attachment_added"
TASK_ATTACHMENT_REMOVED = "task_attachment_removed"
TASK_CHECKLIST_CHANGED = "task_checklist_changed"
TASK_LINKED_OBJECT_REMOVED = "task_linked_object_removed"
TASK_COMMENT_CHANGED = "task_comment_changed"
TASK_LINKED_OBJECT_ADDED = "task_linked_object_added"
TASK_BOARD_MEMBER_ADDED = "task_board_member_added"
class ActionURLs:
@staticmethod
def task_detail(task) -> str:
return f"/tasks?board={task.board_id}&task={task.id}"
@staticmethod
def board_detail(board) -> str:
return f"/tasks?board={board.id}"
class MessageTemplates:
@staticmethod
def task_created(task, actor_name: str) -> tuple[str, str]:
return (
"Новая задача",
f'{actor_name} создал задачу #{task.id} "{task.title}".',
)
@staticmethod
def task_assigned(task, actor_name: str) -> tuple[str, str]:
return (
"Вам назначена задача",
f'{actor_name} назначил вам задачу #{task.id} "{task.title}".',
)
@staticmethod
def task_reassigned(task, actor_name: str) -> tuple[str, str]:
return (
"Исполнитель задачи изменен",
f'{actor_name} изменил исполнителя задачи #{task.id} "{task.title}".',
)
@staticmethod
def task_comment(task, actor_name: str, text: str) -> tuple[str, str]:
preview = text[:160]
return (
"Новый комментарий к задаче",
f'{actor_name} прокомментировал задачу #{task.id} "{task.title}": {preview}',
)
@staticmethod
def task_due_date_changed(
task,
actor_name: str,
old_due_date,
new_due_date,
) -> tuple[str, str]:
old_value = old_due_date or "без срока"
new_value = new_due_date or "без срока"
return (
"Срок задачи изменен",
(
f'{actor_name} изменил срок задачи #{task.id} "{task.title}": '
f"{old_value} -> {new_value}."
),
)
@staticmethod
def task_due_soon(task) -> tuple[str, str]:
return (
"Срок задачи сегодня",
f'Сегодня срок задачи #{task.id} "{task.title}".',
)
@staticmethod
def task_overdue(task) -> tuple[str, str]:
return (
"Задача просрочена",
f'Просрочена задача #{task.id} "{task.title}".',
)
@staticmethod
def task_completed(task, actor_name: str) -> tuple[str, str]:
return (
"Задача завершена",
f'{actor_name} завершил задачу #{task.id} "{task.title}".',
)
@staticmethod
def task_reopened(task, actor_name: str) -> tuple[str, str]:
return (
"Задача возвращена в работу",
f'{actor_name} вернул в работу задачу #{task.id} "{task.title}".',
)
@staticmethod
def task_moved(task, actor_name: str, old_column, new_column) -> tuple[str, str]:
return (
"Задача перемещена",
(
f'{actor_name} переместил задачу #{task.id} "{task.title}": '
f'"{old_column.name}" -> "{new_column.name}".'
),
)
@staticmethod
def task_updated(task, actor_name: str, fields: list[str]) -> tuple[str, str]:
field_names = {
"title": "название",
"description": "описание",
"priority": "приоритет",
"label_ids": "метки",
"participant_ids": "участников",
"cover_attachment_id": "обложку",
"cover": "обложку",
}
changed = ", ".join(field_names.get(field, field) for field in fields)
return (
"Задача изменена",
(
f'{actor_name} изменил задачу #{task.id} "{task.title}"'
f"{f': {changed}' if changed else ''}."
),
)
@staticmethod
def task_deleted(task, actor_name: str) -> tuple[str, str]:
return (
"Задача удалена",
f'{actor_name} удалил задачу #{task.id} "{task.title}".',
)
@staticmethod
def task_activity_changed(
task,
actor_name: str,
action: str,
metadata: dict,
) -> tuple[str, str]:
file_name = metadata.get("file_name") or "файл"
item_title = metadata.get("item_title") or "пункт"
object_label = (
metadata.get("object_label") or metadata.get("object_type") or "объект"
)
messages = {
"attachment_added": (
"К задаче добавлен файл",
f'{actor_name} добавил файл "{file_name}" к задаче #{task.id} "{task.title}".',
),
"attachment_removed": (
"Из задачи удален файл",
f'{actor_name} удалил файл "{file_name}" из задачи #{task.id} "{task.title}".',
),
"checklist_item_added": (
"Чек-лист задачи изменен",
f'{actor_name} добавил пункт "{item_title}" в задачу #{task.id} "{task.title}".',
),
"checklist_item_updated": (
"Чек-лист задачи изменен",
f'{actor_name} изменил пункт "{item_title}" в задаче #{task.id} "{task.title}".',
),
"checklist_item_completed": (
"Пункт чек-листа выполнен",
f'{actor_name} выполнил пункт "{item_title}" в задаче #{task.id} "{task.title}".',
),
"checklist_item_reopened": (
"Пункт чек-листа возвращен",
f'{actor_name} вернул пункт "{item_title}" в задаче #{task.id} "{task.title}".',
),
"checklist_item_removed": (
"Чек-лист задачи изменен",
f'{actor_name} удалил пункт "{item_title}" из задачи #{task.id} "{task.title}".',
),
"linked": (
"К задаче добавлена ссылка",
f'{actor_name} добавил "{object_label}" к задаче #{task.id} "{task.title}".',
),
"unlinked": (
"Связь с задачей удалена",
f'{actor_name} удалил связь "{object_label}" из задачи #{task.id} "{task.title}".',
),
"comment_edited": (
"Комментарий к задаче изменен",
f'{actor_name} изменил комментарий в задаче #{task.id} "{task.title}".',
),
"comment_removed": (
"Комментарий к задаче удален",
f'{actor_name} удалил комментарий из задачи #{task.id} "{task.title}".',
),
}
return messages[action]
@staticmethod
def task_linked_object_added(
task,
actor_name: str,
object_type: str,
) -> tuple[str, str]:
return (
"К задаче добавлен связанный объект",
(
f'{actor_name} добавил объект "{object_type}" '
f'к задаче #{task.id} "{task.title}".'
),
)
@staticmethod
def board_member_added(board, actor_name: str) -> tuple[str, str]:
return (
"Вас добавили на доску",
f'{actor_name} добавил вас на доску "{board.name}".',
)