"""Pozycja odtwarzania per scena (continue watching).""" from __future__ import annotations import uuid from datetime import datetime from sqlalchemy import Boolean, DateTime, ForeignKey, Integer, func from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column from app.models.base import Base class ScenePlayProgress(Base): __tablename__ = "scene_play_progress" scene_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("scenes.id", ondelete="CASCADE"), primary_key=True, ) position_sec: Mapped[int] = mapped_column( Integer, nullable=False, server_default="0", default=0 ) # Mirror Scene.duration_sec gdy player zwróci ten dato — pozwala na poprawny # progress_pct nawet gdy Scene.duration_sec jest None. duration_sec: Mapped[int | None] = mapped_column(Integer) finished: Mapped[bool] = mapped_column( Boolean, nullable=False, server_default="false", default=False ) last_played_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), nullable=False ) class MoviePlayProgress(Base): """Pozycja odtwarzania per film. Mirror ScenePlayProgress dla movies. User-report 2026-05-26 (b207ff17): "przydałoby się oznaczenie filmów już obejrzanych" — sceny mają watched badge, filmów brakowało. """ __tablename__ = "movie_play_progress" movie_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("movies.id", ondelete="CASCADE"), primary_key=True, ) position_sec: Mapped[int] = mapped_column( Integer, nullable=False, server_default="0", default=0 ) duration_sec: Mapped[int | None] = mapped_column(Integer) finished: Mapped[bool] = mapped_column( Boolean, nullable=False, server_default="false", default=False ) last_played_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), nullable=False )