rsnarsna
first commit
667aacd
Raw
History Blame Contribute Delete
2.43 kB
"""
System models — system_settings, background_jobs, job_locks, distributed_locks.
Maps to AGENT.md DBML: Lines 629-657.
"""
from django.db import models
from core.models import BaseModel
class SystemSetting(models.Model):
"""Platform-wide key-value configuration store."""
key = models.CharField(max_length=255, primary_key=True)
value = models.TextField(blank=True, default="")
description = models.CharField(max_length=500, blank=True, default="")
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = "system_settings"
def __str__(self) -> str:
return f"{self.key}={self.value[:50]}"
class BackgroundJob(BaseModel):
"""Tracks background/async jobs."""
class Status(models.TextChoices):
PENDING = "pending", "Pending"
RUNNING = "running", "Running"
COMPLETED = "completed", "Completed"
FAILED = "failed", "Failed"
queue = models.CharField(max_length=100, db_index=True)
payload = models.JSONField(default=dict, blank=True)
status = models.CharField(max_length=20, choices=Status.choices, default=Status.PENDING)
attempts = models.PositiveIntegerField(default=0)
max_attempts = models.PositiveIntegerField(default=3)
error_message = models.TextField(blank=True, default="")
run_at = models.DateTimeField(null=True, blank=True)
failed_at = models.DateTimeField(null=True, blank=True)
class Meta:
db_table = "background_jobs"
ordering = ["-created_at"]
def __str__(self) -> str:
return f"Job {self.pk} ({self.get_status_display()})"
class JobLock(models.Model):
"""Prevents concurrent execution of the same job."""
lock_key = models.CharField(max_length=255, primary_key=True)
locked_by = models.CharField(max_length=255, blank=True, default="")
expires_at = models.DateTimeField()
class Meta:
db_table = "job_locks"
def __str__(self) -> str:
return self.lock_key
class DistributedLock(models.Model):
"""General-purpose distributed lock."""
lock_key = models.CharField(max_length=255, primary_key=True)
owner_id = models.CharField(max_length=255)
acquired_at = models.DateTimeField(auto_now_add=True)
expires_at = models.DateTimeField()
class Meta:
db_table = "distributed_locks"
def __str__(self) -> str:
return f"{self.lock_key} by {self.owner_id}"