Corp/backend/tasks/activity.py

38 lines
945 B
Python

from tasks.models import TaskActivity
from tasks.notifications import notify_task_activity_change
def create_task_activity(
task,
actor,
action,
*,
object_kind="",
object_id=None,
metadata=None,
):
"""Record a task activity and publish its notification side effect."""
authenticated_actor = (
actor if actor and getattr(actor, "is_authenticated", False) else None
)
if authenticated_actor:
task.participants.add(authenticated_actor)
activity_metadata = metadata or {}
activity = TaskActivity.objects.create(
task=task,
actor=authenticated_actor,
action=action,
object_kind=object_kind or "",
object_id=object_id,
metadata=activity_metadata,
)
notify_task_activity_change(
task,
actor,
action,
object_kind=object_kind or "",
metadata=activity_metadata,
)
return activity