From 19a571e3150a48f2249761c4b3b817503d0c1633 Mon Sep 17 00:00:00 2001 From: Josh Creek <8179928+jcreek@users.noreply.github.com> Date: Sun, 4 Jan 2026 22:06:36 +0000 Subject: [PATCH] feat(#67): Add support for multiple pokedexes per user --- src/lib/components/pokedex/PokedexCard.svelte | 51 +++++ .../pokedex/PokedexEntryCatchRecord.svelte | 118 ++++++----- src/lib/components/pokedex/PokedexForm.svelte | 103 +++++++++ .../components/pokedex/PokedexSidebar.svelte | 27 +++ .../pokedex/PokedexViewBoxes.svelte | 14 +- .../components/pokedex/PokedexViewList.svelte | 2 + src/lib/models/CatchRecord.ts | 2 + src/lib/models/Pokedex.ts | 25 +++ src/lib/models/PokedexEntry.ts | 34 +++ src/lib/repositories/CatchRecordRepository.ts | 24 ++- .../repositories/CombinedDataRepository.ts | 142 ++++++++++--- .../repositories/PokedexEntryRepository.ts | 20 +- src/lib/repositories/PokedexRepository.ts | 108 ++++++++++ src/lib/utils/regionalDexMapping.ts | 141 +++++++++++++ src/routes/+layout.svelte | 2 +- src/routes/api/combined-data/+server.ts | 52 ----- src/routes/api/combined-data/all/+server.ts | 36 ---- src/routes/api/pokedexes/+server.ts | 47 +++++ src/routes/api/pokedexes/[id]/+server.ts | 107 ++++++++++ .../[id]}/catch-records/+server.ts | 68 ++++-- .../pokedexes/[id]/combined-data/+server.ts | 72 +++++++ src/routes/my-pokedexes/+page.svelte | 196 ++++++++++++++++++ src/routes/pokedex/[id]/+page.server.ts | 28 +++ .../{mydex => pokedex/[id]}/+page.svelte | 45 ++-- src/routes/signin/+page.svelte | 2 +- .../20250127000001_add_pokedexes_table.sql | 51 +++++ ...000002_add_pokedex_id_to_catch_records.sql | 74 +++++++ ...0260103181600_add_regional_dex_numbers.sql | 25 +++ 28 files changed, 1401 insertions(+), 215 deletions(-) create mode 100644 src/lib/components/pokedex/PokedexCard.svelte create mode 100644 src/lib/components/pokedex/PokedexForm.svelte create mode 100644 src/lib/models/Pokedex.ts create mode 100644 src/lib/repositories/PokedexRepository.ts create mode 100644 src/lib/utils/regionalDexMapping.ts delete mode 100644 src/routes/api/combined-data/+server.ts delete mode 100644 src/routes/api/combined-data/all/+server.ts create mode 100644 src/routes/api/pokedexes/+server.ts create mode 100644 src/routes/api/pokedexes/[id]/+server.ts rename src/routes/api/{ => pokedexes/[id]}/catch-records/+server.ts (55%) create mode 100644 src/routes/api/pokedexes/[id]/combined-data/+server.ts create mode 100644 src/routes/my-pokedexes/+page.svelte create mode 100644 src/routes/pokedex/[id]/+page.server.ts rename src/routes/{mydex => pokedex/[id]}/+page.svelte (85%) create mode 100644 supabase/migrations/20250127000001_add_pokedexes_table.sql create mode 100644 supabase/migrations/20250127000002_add_pokedex_id_to_catch_records.sql create mode 100644 supabase/migrations/20260103181600_add_regional_dex_numbers.sql diff --git a/src/lib/components/pokedex/PokedexCard.svelte b/src/lib/components/pokedex/PokedexCard.svelte new file mode 100644 index 0000000..1cb6949 --- /dev/null +++ b/src/lib/components/pokedex/PokedexCard.svelte @@ -0,0 +1,51 @@ + + +
+
+

+ {pokedex.name} +

+ + {#if pokedex.description} +

{pokedex.description}

+ {/if} + +
+ {#each typeBadges as badge} + {badge} + {/each} +
+ + {#if pokedex.gameScope} +
+ Game: + {pokedex.gameScope} +
+ {:else} +
+ Scope: All Games +
+ {/if} + +
+ + + +
+
+
diff --git a/src/lib/components/pokedex/PokedexEntryCatchRecord.svelte b/src/lib/components/pokedex/PokedexEntryCatchRecord.svelte index 85b931d..659126c 100644 --- a/src/lib/components/pokedex/PokedexEntryCatchRecord.svelte +++ b/src/lib/components/pokedex/PokedexEntryCatchRecord.svelte @@ -10,6 +10,7 @@ export let showForms: boolean; export let showShiny: boolean; export let userId: string | null = null; + export let pokedexId: string; // Create a default catch record if none exists $: if (!catchRecord) { @@ -17,6 +18,7 @@ _id: '', // Empty string, not temp ID - will be created by server userId: userId || '', pokedexEntryId: pokedexEntry._id, + pokedexId: pokedexId, haveToEvolve: false, caught: false, inHome: false, @@ -83,74 +85,76 @@ -
-
-
- -
-
-
-
- -
-
-
-
- -
-
- {#if pokedexEntry.canGigantamax && showForms} + {#if catchRecord} +
- {/if} -

- - -

-
+
+
+ +
+
+
+
+ +
+
+ {#if pokedexEntry.canGigantamax && showForms} +
+
+ +
+
+ {/if} +

+ + +

+
+ {/if}
{#if showOrigins} diff --git a/src/lib/components/pokedex/PokedexForm.svelte b/src/lib/components/pokedex/PokedexForm.svelte new file mode 100644 index 0000000..02a2656 --- /dev/null +++ b/src/lib/components/pokedex/PokedexForm.svelte @@ -0,0 +1,103 @@ + + +
+ + +
+ +
+ + +
+ +
+ +
+ + + + +
+
+ +
+ + +
+ + diff --git a/src/lib/components/pokedex/PokedexSidebar.svelte b/src/lib/components/pokedex/PokedexSidebar.svelte index fb25d38..28790b5 100644 --- a/src/lib/components/pokedex/PokedexSidebar.svelte +++ b/src/lib/components/pokedex/PokedexSidebar.svelte @@ -1,6 +1,8 @@