"""共享白板实体(文本记事本)。 一个白板由 board_id 唯一标识(用户可读的 url id),content 存完整文本, version 是乐观锁版本号(每次编辑 +1)。白板长期留存,进程重启后仍可恢复; 实时协作由 WebSocket hub 在内存中维护在线连接,文本变更经 service 落库后 由 hub 广播给同 board 的其它在线连接。 """ from __future__ import annotations from datetime import datetime from sqlalchemy import BigInteger, DateTime, Integer, String, Text, func from sqlalchemy.orm import Mapped, mapped_column from ..database import Base class Whiteboard(Base): __tablename__ = "whiteboard" id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True) # 用户可读的 url id([a-zA-Z0-9_-]{1,64}),全局唯一 board_id: Mapped[str] = mapped_column(String(64), nullable=False, unique=True, index=True) # 白板文本内容(记事本) content: Mapped[str] = mapped_column(Text, nullable=False, default="") # 乐观锁版本号:每次编辑 +1 version: Mapped[int] = mapped_column(Integer, nullable=False, default=0) # 编辑次数(累计修改次数,含清空),供管理页统计 edit_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0) created_at: Mapped[datetime] = mapped_column( DateTime, server_default=func.now(), nullable=False ) updated_at: Mapped[datetime] = mapped_column( DateTime, server_default=func.now(), onupdate=func.now(), nullable=False ) def __repr__(self) -> str: # pragma: no cover return ( f"" )