触发条件: - 有人对任务添加流转记录(留言/备注) - 任务有 assignee_id - 留言人 != 任务负责人 (不给自己发通知) 通知内容: - title: 💬 收到新留言 - content: 产品[SN]的「任务名」有新留言:{前30字摘要} - type: COMMENT 额外: - Notification 模型新增 NOTIFY_COMMENT 常量 - 前端 notify 页新增 COMMENT 图标(💬)和标题(收到新留言)
54 lines
1.7 KiB
Python
54 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" # 品质驳回
|
||
NOTIFY_COMMENT = "COMMENT" # 留言提醒
|
||
|
||
|
||
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}>"
|