archive-backend/models/video_model.py
2026-11-07 11:40:36 +00:00

47 lines
1.7 KiB
Python

from datetime import date
from sqlalchemy import Date, ForeignKey, String, UniqueConstraint
from sqlalchemy.orm import Mapped, mapped_column, relationship
from ..core.db import Base
class Channel(Base):
__tablename__ = "channels"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(128))
playlists: Mapped[list["Playlist"]] = relationship(back_populates="channel")
videos: Mapped[list["Video"]] = relationship(back_populates="channel")
class Playlist(Base):
__tablename__ = "playlists"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(128))
channel_id: Mapped[int] = mapped_column(ForeignKey("channels.id"))
channel: Mapped[Channel] = relationship(back_populates="playlists")
videos: Mapped[list["Video"]] = relationship(back_populates="playlist")
class Video(Base):
__tablename__ = "videos"
__table_args__ = (
UniqueConstraint("channel_id", "filename", name="uq_video_channel_filename"),
)
id: Mapped[int] = mapped_column(primary_key=True)
filename: Mapped[str] = mapped_column(String(255))
path: Mapped[str] = mapped_column(String(1024))
preview_path: Mapped[str] = mapped_column(String(1024))
playlist_id: Mapped[int | None] = mapped_column(ForeignKey("playlists.id"))
playlist: Mapped[Playlist | None] = relationship(back_populates="videos")
channel_id: Mapped[int] = mapped_column(ForeignKey("channels.id"))
channel: Mapped[Channel] = relationship(back_populates="videos")
title: Mapped[str | None] = mapped_column(String(256), nullable=True)
date: Mapped[date | None] = mapped_column(Date, nullable=True)