53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
|
|
"""通知模型 — 任务转交/驳回等事件的消息提醒"""
|
|||
|
|
import uuid
|
|||
|
|
from datetime import datetime
|
|||
|
|
from sqlalchemy import String, DateTime, Boolean, ForeignKey, Text
|
|||
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|||
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|||
|
|
|
|||
|
|
from app.models.base import Base
|
|||
|
|
from app.core.time_utils import get_beijing_time
|
|||
|
|
|
|||
|
|
# 通知类型常量
|
|||
|
|
NOTIFY_TRANSFER = "TRANSFER" # 新任务派发/转交
|
|||
|
|
NOTIFY_REJECT = "REJECT" # 品质驳回
|
|||
|
|
|
|||
|
|
|
|||
|
|
class Notification(Base):
|
|||
|
|
__tablename__ = "notifications"
|
|||
|
|
|
|||
|
|
id: Mapped[uuid.UUID] = mapped_column(
|
|||
|
|
UUID(as_uuid=True), primary_key=True, default=uuid.uuid4,
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
user_id: Mapped[str] = mapped_column(
|
|||
|
|
String(64), nullable=False, index=True, comment="接收人ID(逻辑外键→老系统)",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
title: Mapped[str] = mapped_column(
|
|||
|
|
String(200), nullable=False, comment="通知标题",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
content: Mapped[str] = mapped_column(
|
|||
|
|
Text, nullable=False, comment="通知内容详情",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
type: Mapped[str] = mapped_column(
|
|||
|
|
String(20), nullable=False, comment="通知类型: TRANSFER(转交派发) | REJECT(驳回)",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
task_id: Mapped[uuid.UUID | None] = mapped_column(
|
|||
|
|
UUID(as_uuid=True), ForeignKey("tasks.id", ondelete="SET NULL"), nullable=True, comment="关联任务ID",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
is_read: Mapped[bool] = mapped_column(
|
|||
|
|
Boolean, default=False, comment="是否已读",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
created_at: Mapped[datetime] = mapped_column(
|
|||
|
|
DateTime(timezone=True), default=get_beijing_time, comment="创建时间",
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
def __repr__(self) -> str:
|
|||
|
|
return f"<Notification {self.type} → {self.user_id}>"
|