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:
39
app/database/multiplayer_realtime_room_event.py
Normal file
39
app/database/multiplayer_realtime_room_event.py
Normal 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
|
||||
)
|
||||
Reference in New Issue
Block a user