Add multiplayer room event model and channel ID allocation

Introduces the MultiplayerRealtimeRoomEvent SQLModel for tracking real-time room events. Adds an async helper to allocate unique channel IDs for rooms, and updates room creation logic to use this helper for assigning channel IDs automatically.
This commit is contained in:
咕谷酱
2025-08-24 05:01:10 +08:00
committed by MingxuanGame
parent fabc1e9e88
commit 56d6911589
2 changed files with 58 additions and 12 deletions

View File

@@ -0,0 +1,39 @@
from datetime import datetime
from typing import Optional, ClassVar
from sqlalchemy import Text
from sqlalchemy.ext.asyncio import AsyncAttrs
from sqlmodel import SQLModel, Field, Column, DateTime, BigInteger, ForeignKey
from app.models.model import UTCBaseModel
from app.utils import utcnow
class MultiplayerRealtimeRoomEventBase(SQLModel, UTCBaseModel):
event_type: str = Field(index=True)
event_detail: Optional[str] = Field(default=None, sa_column=Column(Text))
class MultiplayerRealtimeRoomEvent(AsyncAttrs, MultiplayerRealtimeRoomEventBase, table=True):
__tablename__: ClassVar[str] = "multiplayer_realtime_room_event"
id: int | None = Field(default=None, primary_key=True, index=True)
room_id: int = Field(
sa_column=Column(ForeignKey("rooms.id"), index=True, nullable=False)
)
playlist_item_id: int | None = Field(
default=None,
sa_column=Column(ForeignKey("playlists.id"), index=True, nullable=True),
)
user_id: int | None = Field(
default=None,
sa_column=Column(BigInteger, ForeignKey("lazer_users.id"), index=True, nullable=True),
)
created_at: datetime = Field(
sa_column=Column(DateTime(timezone=True)), default_factory=utcnow
)
updated_at: datetime = Field(
sa_column=Column(DateTime(timezone=True)), default_factory=utcnow
)