Files
g0v0-server/app/database/multiplayer_realtime_room_event.py
咕谷酱 56d6911589 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.
2025-08-26 13:18:11 +08:00

40 lines
1.3 KiB
Python

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
)