467e752629
Extend scheduled messages with a recurrence field. After sending a recurring message, the scheduler automatically creates the next pending occurrence. Frontend adds repeat toggle (Once/Daily/Weekly/Monthly) and displays recurrence in the messages table. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
import enum
|
|
|
|
from tortoise import fields
|
|
from tortoise.models import Model
|
|
|
|
|
|
class MessageChannel(enum.Enum):
|
|
IMESSAGE = "imessage"
|
|
EMAIL = "email"
|
|
|
|
|
|
class MessageStatus(enum.Enum):
|
|
PENDING = "pending"
|
|
SENT = "sent"
|
|
FAILED = "failed"
|
|
CANCELLED = "cancelled"
|
|
|
|
|
|
class Recurrence(enum.Enum):
|
|
NONE = "none"
|
|
DAILY = "daily"
|
|
WEEKLY = "weekly"
|
|
MONTHLY = "monthly"
|
|
|
|
|
|
class ScheduledMessage(Model):
|
|
id = fields.UUIDField(primary_key=True)
|
|
recipient = fields.CharField(max_length=255)
|
|
channel = fields.CharEnumField(enum_type=MessageChannel, max_length=10)
|
|
content = fields.TextField()
|
|
subject = fields.CharField(max_length=255, null=True)
|
|
scheduled_at = fields.DatetimeField()
|
|
status = fields.CharEnumField(
|
|
enum_type=MessageStatus, max_length=10, default=MessageStatus.PENDING
|
|
)
|
|
recurrence = fields.CharEnumField(
|
|
enum_type=Recurrence, max_length=10, default=Recurrence.NONE
|
|
)
|
|
error_message = fields.TextField(null=True)
|
|
created_by = fields.ForeignKeyField(
|
|
"models.User", related_name="scheduled_messages"
|
|
)
|
|
created_at = fields.DatetimeField(auto_now_add=True)
|
|
updated_at = fields.DatetimeField(auto_now=True)
|
|
|
|
class Meta:
|
|
table = "scheduled_messages"
|