Artifex/control_plane/events/models.py
2026-08-15 13:50:24 +07:00

38 lines
1.5 KiB
Python

from __future__ import annotations
from django.db import models
from control_plane.common import TimestampedModel
class EventType(models.TextChoices):
PROJECT_CREATED = "PROJECT_CREATED"
PLAN_APPROVED = "PLAN_APPROVED"
MILESTONE_CREATED = "MILESTONE_CREATED"
TASK_CREATED = "TASK_CREATED"
TASK_READY = "TASK_READY"
TASK_STARTED = "TASK_STARTED"
TASK_COMPLETED = "TASK_COMPLETED"
TASK_FAILED = "TASK_FAILED"
TEST_FAILED = "TEST_FAILED"
REVIEW_FAILED = "REVIEW_FAILED"
COMMIT_CREATED = "COMMIT_CREATED"
MILESTONE_VERIFIED = "MILESTONE_VERIFIED"
PROJECT_BLOCKED = "PROJECT_BLOCKED"
PROJECT_PAUSED = "PROJECT_PAUSED"
PROJECT_RESUMED = "PROJECT_RESUMED"
PROJECT_FINISHED = "PROJECT_FINISHED"
AGENT_CREATED = "AGENT_CREATED"
AGENT_PROMOTED = "AGENT_PROMOTED"
class Event(TimestampedModel):
event_type = models.CharField(max_length=80, choices=EventType.choices)
project = models.ForeignKey("projects.Project", on_delete=models.CASCADE, null=True, blank=True)
task = models.ForeignKey("projects.Task", on_delete=models.CASCADE, null=True, blank=True)
agent_version = models.ForeignKey("agents.AgentVersion", on_delete=models.SET_NULL, null=True, blank=True)
actor = models.CharField(max_length=120, default="system")
payload = models.JSONField(default=dict, blank=True)
class Meta:
indexes = [models.Index(fields=["event_type", "created_at"]), models.Index(fields=["project", "created_at"])]