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 )