Remove Shikimori API, use AnimeThemes only, switch to WebM format

- Remove ShikimoriService, use AnimeThemes API for search
- Replace shikimori_id with animethemes_slug as primary identifier
- Remove FFmpeg MP3 conversion, download WebM directly
- Add .webm support in storage and upload endpoints
- Update frontend to use animethemes_slug

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-01-12 11:22:46 +03:00
parent 333de65fbd
commit cc11f0b773
12 changed files with 138 additions and 263 deletions

View File

@@ -27,12 +27,11 @@ class DownloadStatus(str, enum.Enum):
class Anime(Base):
"""Anime entity from Shikimori."""
"""Anime entity from AnimeThemes."""
__tablename__ = "anime"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
shikimori_id: Mapped[int] = mapped_column(Integer, unique=True, index=True, nullable=False)
animethemes_slug: Mapped[Optional[str]] = mapped_column(String(255), nullable=True, index=True)
animethemes_slug: Mapped[str] = mapped_column(String(255), unique=True, index=True, nullable=False)
title_russian: Mapped[Optional[str]] = mapped_column(String(500), nullable=True)
title_english: Mapped[Optional[str]] = mapped_column(String(500), nullable=True)
@@ -54,7 +53,7 @@ class Anime(Base):
)
def __repr__(self):
return f"<Anime {self.shikimori_id}: {self.title_russian or self.title_english}>"
return f"<Anime {self.animethemes_slug}: {self.title_english}>"
class AnimeTheme(Base):