from sqlalchemy import Boolean, DateTime, Integer, ForeignKey, Index, func from sqlalchemy.orm import Mapped, mapped_column, relationship from datetime import datetime from typing import Optional from app.database import Base class EventLock(Base): __tablename__ = "event_locks" __table_args__ = (Index("ix_event_locks_expires_at", "expires_at"),) id: Mapped[int] = mapped_column(primary_key=True, index=True) event_id: Mapped[int] = mapped_column( Integer, ForeignKey("calendar_events.id", ondelete="CASCADE"), nullable=False, unique=True, ) locked_by: Mapped[int] = mapped_column( Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False ) locked_at: Mapped[datetime] = mapped_column( DateTime, default=func.now(), server_default=func.now() ) expires_at: Mapped[Optional[datetime]] = mapped_column(DateTime, nullable=True) is_permanent: Mapped[bool] = mapped_column( Boolean, default=False, server_default="false" ) event: Mapped["CalendarEvent"] = relationship(lazy="selectin") holder: Mapped["User"] = relationship(foreign_keys=[locked_by], lazy="selectin")