""" Insert sample data into the database for testing. Run from backend: python -m db.test_functions.create_data Requires DATABASE_URL in backend/.env. Uses umbrella Manga + MangaSource + Chapters (per provider_id). Optional external_manga_id on save_page_translation links a provider catalog id (e.g. MangaDex UUID). """ import db from db.const import PROVIDER_LOCAL, PROVIDER_MANGADEX # Demo external ids (MangaDex uses UUID strings; local can use legacy-* from DB or omit) NARUTO_MANGADEX_ID = "931b3112-7b75-43e4-a13f-908f0a251ae2" # example placeholder UUID def _bubbles(*pairs: tuple[str, str]) -> list[dict]: """Create fake text segments from (original, translated) pairs.""" result = [] for i, (orig, trans) in enumerate(pairs): result.append({ "bubble_index": i, "x1": 10.0 + i * 5, "y1": 20.0 + i * 40, "x2": 100.0, "y2": 50.0 + i * 40, "original_text": orig, "translated_text": trans, }) return result def seed(): db.init_db() # Umbrella manga 1: One Piece — local files only (no API id → omit external_manga_id, DB uses legacy-*) db.save_page_translation( provider_id=PROVIDER_LOCAL, manga_title="One Piece", chapter_number=1.0, page_number=1, bubbles=_bubbles(("海賊王に俺はなる!", "I'm gonna be King of the Pirates!")), language_code="en", ) db.save_page_translation( provider_id=PROVIDER_LOCAL, manga_title="One Piece", chapter_number=1.0, page_number=2, bubbles=_bubbles(("麦わらのルフィ", "Monkey D. Luffy"), ("ゼファ", "Zeff")), language_code="en", ) db.save_page_translation( provider_id=PROVIDER_LOCAL, manga_title="One Piece", chapter_number=2.0, page_number=1, bubbles=_bubbles(("冒険の始まり", "The adventure begins")), language_code="en", ) # Umbrella manga 2: Naruto — MangaDex catalog id stored in manga_source via external_manga_id db.save_page_translation( provider_id=PROVIDER_MANGADEX, manga_title="Naruto", chapter_number=1.0, page_number=1, bubbles=_bubbles(("忍たま乱太郎", "Ninja Academy"), ("うずまきナルト", "Uzumaki Naruto")), language_code="en", external_manga_id=NARUTO_MANGADEX_ID, ) print("Seed data inserted.\n") # --- Queries: umbrella manga (no provider on Manga row) --- mangas = db.list_mangas(order_by="updated_at", order_desc=True) print("=== list_mangas (umbrella) ===") for m in mangas: print(f" id={m.id} title={m.manga_title!r} updated_at={m.updated_at}") # --- Chapters are scoped by provider: same title can exist per source --- print("\n=== list_chapters('One Piece', provider_id=local) ===") for c in db.list_chapters("One Piece", provider_id=PROVIDER_LOCAL): print(f" ch.id={c.id} provider={c.provider_id!r} ch={c.chapter_number} updated={c.updated_at}") print("\n=== list_chapters('Naruto', provider_id=mangadex) ===") for c in db.list_chapters("Naruto", provider_id=PROVIDER_MANGADEX): print(f" ch.id={c.id} provider={c.provider_id!r} ch={c.chapter_number} updated={c.updated_at}") # Resolve umbrella id from provider + external catalog id mid = db.resolve_manga_id_by_source(PROVIDER_MANGADEX, NARUTO_MANGADEX_ID) print("\n=== resolve_manga_id_by_source(mangadex, external_manga_id) ===") print(f" umbrella manga_id for Naruto sample UUID: {mid}") # Sample segment query (provider on chapter) segs = db.get_chapter_segments(PROVIDER_LOCAL, "One Piece", 1.0) print("\n=== get_chapter_segments(local, 'One Piece', 1.0) ===") print(f" segment count: {len(segs)}") if segs: s0 = segs[0] print(f" first: provider_id={s0.provider_id!r} page={s0.page_number} translated={s0.translated_text!r}") if __name__ == "__main__": seed()