goon/app/models/external_record.py
goon-foss a4486980a4 style: myslniki em/en z komentarzy i docstringow (calosc repo)
1745 wystapien w 291 plikach (backend, scripts, mobile). Dominowal jeden ksztalt,
' — ' laczace zdania, wiec poszedl przecinek; myslnik otwierajacy mysl zdjety;
zakresy 0–5 i A–Z na dywiz.

Podzial komentarz/kod robil skaner stanow, nie regex, zeby nie ruszyc myslnika
stojacego w stringu albo w wyrazeniu regularnym. Potwierdzone maszynowo: po wycieciu
komentarzy z wersji HEAD i z dysku obie sa identyczne we wszystkich 291 plikach,
czyli poza komentarzami nie zmienilo sie nic. 233 pliki .py parsuja sie bez bledu,
tsc ma te same 11 bledow w tych samych 3 plikach co przed zmiana.

Dwie rzeczy wymagaly poprawki po automacie: wyrownane listy definicji, gdzie myslnik
byl separatorem kolumny (37 miejsc, kolumna przywrocona), i trzy przeniesienia mysli
do nowej linii, gdzie zostawal wiszacy przecinek na poczatku (poprawione recznie).

Bundla nie republikuje: Hermes i tak nie niesie komentarzy, wiec dla uzytkownika
to zero zmiany.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 11:51:57 +02:00

42 lines
1.4 KiB
Python

import enum
import uuid
from datetime import datetime
from sqlalchemy import DateTime, Enum, ForeignKey, LargeBinary, String, UniqueConstraint, func
from sqlalchemy.dialects.postgresql import JSONB, UUID
from sqlalchemy.orm import Mapped, mapped_column
from app.models.base import Base, UUIDPKMixin
class EntityKind(str, enum.Enum):
scene = "scene"
performer = "performer"
studio = "studio"
tag = "tag"
movie = "movie"
class ExternalRecord(UUIDPKMixin, Base):
"""Surowy snapshot encji z konkretnego źródła. Idempotentny, raw_hash chroni przed reprocessingiem."""
__tablename__ = "external_records"
__table_args__ = (
UniqueConstraint("source_id", "entity_kind", "external_id"),
)
source_id: Mapped[uuid.UUID] = mapped_column(
UUID(as_uuid=True), ForeignKey("sources.id", ondelete="CASCADE"), nullable=False, index=True
)
entity_kind: Mapped[EntityKind] = mapped_column(
Enum(EntityKind, name="entity_kind"), nullable=False
)
external_id: Mapped[str] = mapped_column(String, nullable=False)
raw: Mapped[dict] = mapped_column(JSONB, nullable=False)
raw_hash: Mapped[bytes] = mapped_column(LargeBinary(32), nullable=False)
fetched_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), server_default=func.now(), nullable=False
)
last_seen_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), server_default=func.now(), nullable=False
)