60 lines
2.1 KiB
Python
60 lines
2.1 KiB
Python
"""分发排期数据模型"""
|
|
import uuid
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import String, Integer, ForeignKey, Index, func, Text
|
|
from sqlalchemy import Uuid
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from app.database import Base, JSONType
|
|
|
|
|
|
class DistributionSchedule(Base):
|
|
__tablename__ = "distribution_schedules"
|
|
|
|
id: Mapped[uuid.UUID] = mapped_column(
|
|
Uuid(as_uuid=True),
|
|
primary_key=True,
|
|
default=uuid.uuid4,
|
|
)
|
|
organization_id: Mapped[uuid.UUID] = mapped_column(
|
|
Uuid(as_uuid=True),
|
|
ForeignKey("organizations.id", ondelete="CASCADE"),
|
|
nullable=False,
|
|
)
|
|
content_title: Mapped[str] = mapped_column(String(500), nullable=False)
|
|
content_id: Mapped[uuid.UUID | None] = mapped_column(
|
|
Uuid(as_uuid=True),
|
|
ForeignKey("contents.id", ondelete="SET NULL"),
|
|
nullable=True,
|
|
)
|
|
platforms: Mapped[list | None] = mapped_column(JSONType, nullable=True)
|
|
"""[{platform, platform_name, scheduled_time, status}]"""
|
|
tips: Mapped[list | None] = mapped_column(JSONType, nullable=True)
|
|
status: Mapped[str] = mapped_column(String(20), server_default="pending", nullable=False)
|
|
created_by: Mapped[str | None] = mapped_column(
|
|
String(36),
|
|
ForeignKey("users.id", ondelete="SET NULL"),
|
|
nullable=True,
|
|
)
|
|
created_at: Mapped[datetime] = mapped_column(
|
|
server_default=func.now(),
|
|
nullable=False,
|
|
)
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|
server_default=func.now(),
|
|
onupdate=func.now(),
|
|
nullable=False,
|
|
)
|
|
|
|
# Relationships
|
|
organization: Mapped["Organization"] = relationship("Organization", foreign_keys=[organization_id])
|
|
content: Mapped["Content | None"] = relationship("Content", foreign_keys=[content_id])
|
|
creator: Mapped["User | None"] = relationship("User", foreign_keys=[created_by])
|
|
|
|
__table_args__ = (
|
|
Index("idx_distribution_schedules_organization_id", "organization_id"),
|
|
Index("idx_distribution_schedules_status", "status"),
|
|
Index("idx_distribution_schedules_created_by", "created_by"),
|
|
)
|