goon/app/models/favorite_site.py
goon-foss f1b8b8d466 feat(favorites): przypinane strony (favorite_sites) z endpointami list/add/remove
Prosba z apki 2026-09-02: ulubione strony maja siedziec na gorze zakladki Sites. Po
stronie serwera jak reszta ulubionych, bo kod synchronizacji to device_id i tabele
kluczowane po nim przechodza na nowe urzadzenie razem. Origin bez klucza obcego
(zrodla nie maja tabeli po origin), za to przy dodawaniu sprawdzany w playback_sources,
a sam napis ograniczony wzorcem, zeby nie dalo sie wpisac smieci.

Migracja 0034 (create table, bez blokad). Sprawdzone TestClientem w kontenerze api:
dodanie, powtorne dodanie (created=false), lista w kolejnosci dodania, nieznany origin
404, zly wzorzec 422, usuniecie 204.
2026-09-02 22:44:35 +02:00

25 lines
945 B
Python

"""Ulubione strony (origins), single-user, in-app. Mirror FavoriteStudio struktury.
Prosba z apki 2026-09-02: przypiac wybrane strony na gorze zakladki Sites. Po stronie
serwera, a nie w SecureStore, bo reszta ulubionych tez jest tu i przechodzi na inne
urzadzenie kodem synchronizacji (kod = device_id). Origin to zwykly napis
(`tube:hqpornercom`), bez FK: zrodla nie maja tabeli kluczowanej po origin.
"""
from __future__ import annotations
from datetime import datetime
from sqlalchemy import DateTime, String, func
from sqlalchemy.orm import Mapped, mapped_column
from app.models.base import Base
class FavoriteSite(Base):
__tablename__ = "favorite_sites"
device_id: Mapped[str] = mapped_column(String(64), primary_key=True)
origin: Mapped[str] = mapped_column(String(64), primary_key=True)
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), server_default=func.now(), nullable=False
)