30 lines
1.2 KiB
Python
30 lines
1.2 KiB
Python
from datetime import datetime
|
||
|
||
from sqlalchemy import Boolean, Integer, JSON, String
|
||
from sqlalchemy.orm import Mapped, mapped_column
|
||
|
||
from app.core.database import Base
|
||
|
||
|
||
class ScheduleTask(Base):
|
||
"""
|
||
Персистентная метадата пользовательских расписаний.
|
||
|
||
APScheduler остаётся рантайм-движком исполнения, а эта таблица служит
|
||
источником истины для CRUD, восстановления и миграции задач.
|
||
"""
|
||
|
||
__tablename__ = "schedules"
|
||
|
||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||
job_id: Mapped[str] = mapped_column(String, unique=True, index=True)
|
||
trigger_type: Mapped[str] = mapped_column(String) # once | cron
|
||
target_id: Mapped[str] = mapped_column(String)
|
||
target_type: Mapped[str] = mapped_column(String) # group | device
|
||
trigger_args: Mapped[dict] = mapped_column(JSON)
|
||
action_params: Mapped[dict] = mapped_column(JSON)
|
||
is_active: Mapped[bool] = mapped_column(Boolean, default=True)
|
||
created_at: Mapped[str] = mapped_column(
|
||
String, default=lambda: datetime.now().isoformat()
|
||
)
|