2.2 KiB
2.2 KiB
05. Create Feed Data Models and Types
meta: id: podcast-tui-app-05 feature: podcast-tui-app priority: P0 depends_on: [04] tags: [types, data-models, solidjs, typescript]
objective:
- Define TypeScript interfaces for all podcast-related data types
- Create models for feeds, episodes, sources, and user preferences
- Set up type definitions for sync functionality
deliverables:
src/types/podcast.tswith all data modelssrc/types/episode.tswith episode-specific typessrc/types/source.tswith podcast source typessrc/types/preference.tswith user preference types
steps:
- Create
src/types/podcast.tswith core types:Podcastinterface (id, title, description, coverUrl, feedUrl, lastUpdated)Episodeinterface (id, title, description, audioUrl, duration, pubDate, episodeNumber)Feedinterface (id, podcast, episodes[], isPublic, sourceId)FeedIteminterface (represents a single episode in a feed)
- Create
src/types/episode.tswith episode types:EpisodeinterfaceEpisodeStatusenum (playing, paused, completed)Progressinterface (episodeId, position, duration)
- Create
src/types/source.tswith source types:PodcastSourceinterface (id, name, baseUrl, type, apiKey)SourceTypeenum (rss, api, custom)SearchQueryinterface (query, sourceIds, filters)
- Create
src/types/preference.tswith preference types:UserPreferenceinterface (theme, fontSize, playbackSpeed, autoDownload)SyncPreferenceinterface (autoSync, backupInterval, syncMethod)
- Add type exports in
src/index.ts
tests:
- Unit: Verify all interfaces compile correctly
- Unit: Test enum values are correct
- Integration: Test type definitions match expected data structures
acceptance_criteria:
- All TypeScript interfaces compile without errors
- Types are exported for use across the application
- Type definitions cover all podcast-related data
validation:
- Run
bun run buildto verify TypeScript compilation - Check
src/types/directory contains all required files
notes:
- Use strict TypeScript mode
- Include JSDoc comments for complex types
- Keep types simple and focused
- Ensure types are compatible with sync JSON/XML formats