36 lines
1.0 KiB
Python
36 lines
1.0 KiB
Python
from datetime import datetime
|
|
from typing import TYPE_CHECKING
|
|
|
|
from app.utils import utcnow
|
|
|
|
from sqlalchemy.ext.asyncio import AsyncAttrs
|
|
from sqlmodel import (
|
|
BigInteger,
|
|
Column,
|
|
DateTime,
|
|
Field,
|
|
ForeignKey,
|
|
Relationship,
|
|
SQLModel,
|
|
)
|
|
|
|
if TYPE_CHECKING:
|
|
from .lazer_user import User
|
|
from .room import Room
|
|
|
|
|
|
class RoomParticipatedUser(AsyncAttrs, SQLModel, table=True):
|
|
__tablename__: str = "room_participated_users"
|
|
|
|
id: int | None = Field(default=None, sa_column=Column(BigInteger, primary_key=True, autoincrement=True))
|
|
room_id: int = Field(sa_column=Column(ForeignKey("rooms.id"), nullable=False))
|
|
user_id: int = Field(sa_column=Column(BigInteger, ForeignKey("lazer_users.id"), nullable=False))
|
|
joined_at: datetime = Field(
|
|
sa_column=Column(DateTime(timezone=True), nullable=False),
|
|
default_factory=utcnow,
|
|
)
|
|
left_at: datetime | None = Field(sa_column=Column(DateTime(timezone=True), nullable=True), default=None)
|
|
|
|
room: "Room" = Relationship()
|
|
user: "User" = Relationship()
|