Implement plans
This commit is contained in:
106
core/models.py
106
core/models.py
@@ -2176,6 +2176,7 @@ class ExternalSyncEvent(models.Model):
|
||||
("ok", "OK"),
|
||||
("failed", "Failed"),
|
||||
("retrying", "Retrying"),
|
||||
("waiting_approval", "Waiting Approval"),
|
||||
)
|
||||
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
@@ -2227,6 +2228,111 @@ class TaskProviderConfig(models.Model):
|
||||
]
|
||||
|
||||
|
||||
class CodexRun(models.Model):
|
||||
STATUS_CHOICES = (
|
||||
("queued", "Queued"),
|
||||
("running", "Running"),
|
||||
("waiting_approval", "Waiting Approval"),
|
||||
("approved_waiting_resume", "Approved Waiting Resume"),
|
||||
("denied", "Denied"),
|
||||
("ok", "OK"),
|
||||
("failed", "Failed"),
|
||||
("cancelled", "Cancelled"),
|
||||
)
|
||||
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="codex_runs")
|
||||
task = models.ForeignKey(
|
||||
DerivedTask,
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name="codex_runs",
|
||||
)
|
||||
derived_task_event = models.ForeignKey(
|
||||
DerivedTaskEvent,
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name="codex_runs",
|
||||
)
|
||||
source_message = models.ForeignKey(
|
||||
Message,
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name="codex_runs",
|
||||
)
|
||||
project = models.ForeignKey(
|
||||
TaskProject,
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name="codex_runs",
|
||||
)
|
||||
epic = models.ForeignKey(
|
||||
TaskEpic,
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name="codex_runs",
|
||||
)
|
||||
source_service = models.CharField(max_length=255, blank=True, default="")
|
||||
source_channel = models.CharField(max_length=255, blank=True, default="")
|
||||
external_chat_id = models.CharField(max_length=255, blank=True, default="")
|
||||
status = models.CharField(max_length=32, choices=STATUS_CHOICES, default="queued")
|
||||
request_payload = models.JSONField(default=dict, blank=True)
|
||||
result_payload = models.JSONField(default=dict, blank=True)
|
||||
error = models.TextField(blank=True, default="")
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
indexes = [
|
||||
models.Index(fields=["user", "status", "updated_at"]),
|
||||
models.Index(fields=["user", "source_service", "source_channel", "created_at"]),
|
||||
]
|
||||
|
||||
|
||||
class CodexPermissionRequest(models.Model):
|
||||
STATUS_CHOICES = (
|
||||
("pending", "Pending"),
|
||||
("approved", "Approved"),
|
||||
("denied", "Denied"),
|
||||
("expired", "Expired"),
|
||||
)
|
||||
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="codex_permission_requests")
|
||||
codex_run = models.ForeignKey(
|
||||
CodexRun,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="permission_requests",
|
||||
)
|
||||
external_sync_event = models.ForeignKey(
|
||||
ExternalSyncEvent,
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name="codex_permission_requests",
|
||||
)
|
||||
approval_key = models.CharField(max_length=255, unique=True)
|
||||
summary = models.TextField(blank=True, default="")
|
||||
requested_permissions = models.JSONField(default=dict, blank=True)
|
||||
resume_payload = models.JSONField(default=dict, blank=True)
|
||||
status = models.CharField(max_length=16, choices=STATUS_CHOICES, default="pending")
|
||||
requested_at = models.DateTimeField(auto_now_add=True)
|
||||
resolved_at = models.DateTimeField(null=True, blank=True)
|
||||
resolved_by_identifier = models.CharField(max_length=255, blank=True, default="")
|
||||
resolution_note = models.TextField(blank=True, default="")
|
||||
|
||||
class Meta:
|
||||
indexes = [
|
||||
models.Index(fields=["user", "status", "requested_at"]),
|
||||
models.Index(fields=["approval_key"]),
|
||||
]
|
||||
|
||||
|
||||
class ContactAvailabilitySettings(models.Model):
|
||||
user = models.OneToOneField(
|
||||
User,
|
||||
|
||||
Reference in New Issue
Block a user