38 lines
945 B
Python
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
|