mirror of
https://github.com/NCBM/plyngent.git
synced 2026-07-23 05:55:16 +08:00
core/memory: add SQLAlchemy schema for user, session, message
This commit is contained in:
@@ -0,0 +1,52 @@
|
|||||||
|
from datetime import datetime # noqa: TC003
|
||||||
|
|
||||||
|
from sqlalchemy import JSON, DateTime, ForeignKey, String, UniqueConstraint, func
|
||||||
|
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
|
||||||
|
|
||||||
|
|
||||||
|
class PlyngentBase(DeclarativeBase):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class User(PlyngentBase):
|
||||||
|
__tablename__: str = "user"
|
||||||
|
|
||||||
|
uid: Mapped[int] = mapped_column(primary_key=True)
|
||||||
|
name: Mapped[str] = mapped_column(String(48), unique=True)
|
||||||
|
email: Mapped[str] = mapped_column(String(255), unique=True)
|
||||||
|
password_hash: Mapped[str] = mapped_column(String(256))
|
||||||
|
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
||||||
|
# deleted_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
|
||||||
|
|
||||||
|
sessions: Mapped[list["Session"]] = relationship(back_populates="user", cascade="all, delete-orphan")
|
||||||
|
|
||||||
|
|
||||||
|
class Session(PlyngentBase):
|
||||||
|
__tablename__: str = "session"
|
||||||
|
|
||||||
|
sid: Mapped[int] = mapped_column(primary_key=True)
|
||||||
|
uid: Mapped[int] = mapped_column(ForeignKey(User.uid, ondelete="CASCADE"), index=True)
|
||||||
|
name: Mapped[str] = mapped_column(String(64))
|
||||||
|
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
||||||
|
updated_at: Mapped[datetime] = mapped_column(
|
||||||
|
DateTime(timezone=True), server_default=func.now(), onupdate=func.now()
|
||||||
|
)
|
||||||
|
|
||||||
|
user: Mapped[User] = relationship(back_populates="sessions")
|
||||||
|
messages: Mapped[list["Message"]] = relationship(back_populates="session", cascade="all, delete-orphan")
|
||||||
|
|
||||||
|
|
||||||
|
class Message(PlyngentBase):
|
||||||
|
__tablename__: str = "message"
|
||||||
|
__table_args__: tuple[object, ...] = (UniqueConstraint("sid", "seq", name="uq_session_seq"),)
|
||||||
|
|
||||||
|
mid: Mapped[int] = mapped_column(primary_key=True)
|
||||||
|
sid: Mapped[int] = mapped_column(ForeignKey(Session.sid, ondelete="CASCADE"), index=True)
|
||||||
|
seq: Mapped[int] = mapped_column(index=True)
|
||||||
|
data: Mapped[dict[str, object]] = mapped_column(JSON())
|
||||||
|
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
||||||
|
updated_at: Mapped[datetime] = mapped_column(
|
||||||
|
DateTime(timezone=True), server_default=func.now(), onupdate=func.now()
|
||||||
|
)
|
||||||
|
|
||||||
|
session: Mapped[Session] = relationship(back_populates="messages")
|
||||||
Reference in New Issue
Block a user