diff --git a/.beans/nuzlocke-tracker-sm1b--game-data-models-types.md b/.beans/nuzlocke-tracker-sm1b--game-data-models-types.md index f2a575a..26d8cfc 100644 --- a/.beans/nuzlocke-tracker-sm1b--game-data-models-types.md +++ b/.beans/nuzlocke-tracker-sm1b--game-data-models-types.md @@ -1,11 +1,11 @@ --- # nuzlocke-tracker-sm1b title: Game Data Models & Types -status: todo +status: completed type: task priority: normal created_at: 2026-02-04T15:44:08Z -updated_at: 2026-02-04T15:45:00Z +updated_at: 2026-02-05T12:33:38Z parent: nuzlocke-tracker-f5ob blocking: - nuzlocke-tracker-k5lm @@ -17,12 +17,14 @@ blocking: Define the core data structures and TypeScript types for the application. ## Checklist -- [ ] Define Game type (id, name, generation, region, routes) -- [ ] Define Route/Area type (id, name, available Pokémon, game) -- [ ] Define Pokemon type (national dex number, name, types, sprite URL) -- [ ] Define Encounter type (route, pokemon, nickname, status, caught date) -- [ ] Define NuzlockeRun type (game, settings, encounters, start date) -- [ ] Define RuleSettings type (hardcore mode, level caps, duplicates clause, etc.) +- [x] Define Game type (id, name, slug, generation, region, boxArtUrl, releaseYear) +- [x] Define Route/Area type (id, name, gameId, order) +- [x] Define Pokemon type (id, nationalDex, name, types, spriteUrl) +- [x] Define Encounter type (id, runId, routeId, pokemonId, nickname, status, catchLevel, faintLevel, caughtAt) +- [x] Define NuzlockeRun type (id, gameId, name, status, rules, startedAt, completedAt) +- [x] Define RuleSettings type (already existed in rules.ts) +- [x] Define RouteEncounter type (id, routeId, pokemonId, encounterMethod, encounterRate) +- [x] Define EncounterStatus and RunStatus discriminated union types ## Notes - Keep types flexible for future expansion diff --git a/frontend/src/types/game.ts b/frontend/src/types/game.ts new file mode 100644 index 0000000..d7c44ce --- /dev/null +++ b/frontend/src/types/game.ts @@ -0,0 +1,62 @@ +export interface Game { + id: number + name: string + slug: string + generation: number + region: string + boxArtUrl: string | null + releaseYear: number | null +} + +export interface Route { + id: number + name: string + gameId: number + order: number +} + +export interface Pokemon { + id: number + nationalDex: number + name: string + types: string[] + spriteUrl: string | null +} + +export interface RouteEncounter { + id: number + routeId: number + pokemonId: number + encounterMethod: string + encounterRate: number +} + +export type EncounterStatus = 'caught' | 'fainted' | 'missed' + +export interface Encounter { + id: number + runId: number + routeId: number + pokemonId: number + nickname: string | null + status: EncounterStatus + catchLevel: number | null + faintLevel: number | null + caughtAt: string +} + +export type RunStatus = 'active' | 'completed' | 'failed' + +export interface NuzlockeRun { + id: number + gameId: number + name: string + status: RunStatus + rules: NuzlockeRules + startedAt: string + completedAt: string | null +} + +// Re-export for convenience +import type { NuzlockeRules } from './rules' +export type { NuzlockeRules } diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index 786abb4..d926007 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -1 +1,2 @@ +export * from './game' export * from './rules'