File size: 4,304 Bytes
a1d11a9
 
148535d
a1d11a9
148535d
ee75ec9
 
a1d11a9
 
 
 
148535d
 
 
a1d11a9
ee75ec9
 
 
 
 
 
 
 
 
 
 
 
 
a1d11a9
 
 
 
ee75ec9
 
 
 
 
 
 
 
 
 
 
 
a1d11a9
 
 
 
 
 
 
 
148535d
ee75ec9
 
a1d11a9
 
 
ee75ec9
 
 
 
 
 
a1d11a9
 
ee75ec9
a1d11a9
 
 
ee75ec9
 
 
 
 
 
 
a1d11a9
 
ee75ec9
a1d11a9
 
 
ee75ec9
 
 
 
 
 
a1d11a9
 
148535d
ee75ec9
 
a1d11a9
 
 
ee75ec9
 
 
 
 
 
 
a1d11a9
148535d
a1d11a9
148535d
 
 
 
7d90b6b
148535d
7d90b6b
148535d
 
 
ee75ec9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a1d11a9
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
"""
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 + Chapters. Optional external_manga_id (MangaDex series id)
on save_panels_translation stores MangaDex series id.
"""

import db

# 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 _slug(title: str) -> str:
    s = title.strip().lower().replace(" ", "_")
    return "".join(ch for ch in s if ch.isalnum() or ch == "_")


def _bubbles(
    manga_title: str,
    chapter_number: float,
    page_number: int,
    *pairs: tuple[str, str],
) -> list[dict]:
    """Create fake panels from (original, translated) pairs."""
    slug = _slug(manga_title)
    result = []
    for i, (orig, trans) in enumerate(pairs):
        result.append({
            "bubble_index": i,
            # Page coordinate space (example values)
            "width": 1080,
            "height": 1522,
            # Globally unique demo URLs (matches global uniqueness on panel_url).
            "panel_url": (
                "https://example.invalid/panels/"
                f"{slug}/ch{chapter_number:g}/p{page_number}/b{i}.jpg"
            ),
            "x1": 120.0 + i * 18,
            "y1": 140.0 + i * 55,
            "x2": 420.0 + i * 18,
            "y2": 260.0 + i * 55,
            "original_text": orig,
            "translated_text": trans,
        })
    return result


def seed():
    db.init_db()

    # Umbrella manga 1: One Piece — MangaDex provider (example seed)
    db.save_panels_translation(
        manga_title="One Piece",
        chapter_number=1.0,
        page_number=1,
        panels=_bubbles(
            "One Piece",
            1.0,
            1,
            ("海賊王に俺はなる!", "I'm gonna be King of the Pirates!"),
        ),
        language_code="en",
    )
    db.save_panels_translation(
        manga_title="One Piece",
        chapter_number=1.0,
        page_number=2,
        panels=_bubbles(
            "One Piece",
            1.0,
            2,
            ("麦わらのルフィ", "Monkey D. Luffy"),
            ("ゼファ", "Zeff"),
        ),
        language_code="en",
    )
    db.save_panels_translation(
        manga_title="One Piece",
        chapter_number=2.0,
        page_number=1,
        panels=_bubbles(
            "One Piece",
            2.0,
            1,
            ("冒険の始まり", "The adventure begins"),
        ),
        language_code="en",
    )

    # Umbrella manga 2: Naruto — MangaDex series id stored on Manga via external_manga_id
    db.save_panels_translation(
        manga_title="Naruto",
        chapter_number=1.0,
        page_number=1,
        panels=_bubbles(
            "Naruto",
            1.0,
            1,
            ("忍たま乱太郎", "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') ===")
    for c in db.list_chapters("One Piece"):
        print(f"  ch.id={c.id}  ch={c.chapter_number}  updated={c.updated_at}")

    print("\n=== list_chapters('Naruto') ===")
    for c in db.list_chapters("Naruto"):
        print(f"  ch.id={c.id}  ch={c.chapter_number}  updated={c.updated_at}")

    print("\n=== MangaDex external_manga_id mapping ===")
    print("  Stored on manga.mangadex_manga_id")

    # Sample panel query
    panels = db.get_chapter_panels("One Piece", 1.0)
    print("\n=== get_chapter_panels('One Piece', 1.0) ===")
    print(f"  panel count: {len(panels)}")
    if panels:
        p0 = panels[0]
        print(f"  first: page={p0.page_number}  translated={p0.translated_text!r}")


if __name__ == "__main__":
    seed()